Gestire tutti i file su un dispositivo di archiviazione

La maggior parte delle app che richiedono l'accesso allo spazio di archiviazione condiviso può seguire meglio pratiche per la condivisione di contenuti multimediali file e la condivisione di contenuti non multimediali . Tuttavia, alcune le app hanno un caso d'uso principale che richiede l'accesso ampio ai file su un dispositivo, ma non possono accedervi in modo efficiente usando le best practice per l'archiviazione nel rispetto della privacy. Android offre un accesso speciale per le app chiamato accesso a tutti i file in situazioni diverse.

Ad esempio, il caso d'uso principale di un'app antivirus potrebbe richiedere una scansione regolare di molti file in directory diverse. Se questa scansione richiede interazioni degli utenti per selezionare le directory utilizzando il selettore file di sistema, offre un'esperienza utente scadente. Altri casi d'uso, ad esempio app di gestione di file, app di backup e ripristino e app di gestione documenti: sono necessarie app simili diverse considerazioni.

Richiedi l'accesso a tutti i file

Un'app può richiedere all'utente l'accesso a tutti i file procedendo nel seguente modo:

  1. Dichiara il MANAGE_EXTERNAL_STORAGE nel file manifest.
  2. Utilizza la ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION azione intenzionale per indirizzare gli utenti a una pagina delle impostazioni di sistema in cui possono attivare la seguente opzione per la tua app: Consenti l'accesso per gestire tutti i file.

Per determinare se alla tua app è stato concesso l'MANAGE_EXTERNAL_STORAGE autorizzazione, chiama Environment.isExternalStorageManager()

Operazioni consentite da MANAGE_EXTERNAL_STORAGE

L'autorizzazione MANAGE_EXTERNAL_STORAGE concede quanto segue:

  • Accesso in lettura e scrittura a tutti i file all'interno dello spazio condiviso spazio di archiviazione.

  • Accedi ai contenuti del Tabella MediaStore.Files.

  • Accesso alla directory root dell'unità USB on-the-go (OTG) e della scheda SD .

  • Accesso in scrittura a tutte le directory della memoria interna⁠ tranne /Android/data/, /sdcard/Android e la maggior parte delle sottodirectory di /sdcard/Android. Questo accesso in scrittura include file diretto di accesso al percorso di Google Cloud.

    Le app a cui è stata concessa questa autorizzazione non possono ancora accedere all'app che appartengono ad altre app, poiché queste directory appaiono come sottodirectory di Android/data/ su un volume di archiviazione.

Quando un'app dispone dell'autorizzazione MANAGE_EXTERNAL_STORAGE, può accedere a questi i file e le directory aggiuntivi utilizzando API di MediaStore o file diretto di lavoro. Quando utilizzi il Storage Access Framework tuttavia, puoi accedere a un file o a una directory solo se puoi farlo senza dispone dell'autorizzazione MANAGE_EXTERNAL_STORAGE.

Richiamare l'attività di gestione dello spazio di archiviazione di un'altra app

Su Android 12 (livello API 31) e versioni successive, le app che hanno sia il MANAGE_EXTERNAL_STORAGE autorizzazione e QUERY_ALL_PACKAGES come le app di gestione di file, possono utilizzare getManageSpaceActivityIntent() per indirizzare gli utenti alla gestione dello spazio personalizzata di un'altra app attività.

Il metodo getManageSpaceActivityIntent() utilizza il nome di un pacchetto e un di richiesta di codice, che restituirà uno dei seguenti valori:

  • Una PendingIntent, se l'app con specificato per il nome del pacchetto ha definito uno spazio di gestione dello spazio personalizzato attività. Il file che ha chiamato il metodo getManageSpaceActivityIntent() può quindi richiamare l'intent restituito per indirizzare gli utenti all'attività personalizzata.
  • null, se l'app con il nome del pacchetto specificato non definisce un spazio" attività.

Abilita MANAGE_EXTERNAL_STORAGE per test

Per scoprire in che modo l'autorizzazione MANAGE_EXTERNAL_STORAGE influisce sulla tua app, può abilitare l'autorizzazione per i test. Per farlo, esegui questo comando sulla macchina connessa al tuo dispositivo di test:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Notifica di Google Play

Questa sezione contiene un avviso per gli sviluppatori che pubblicano app su Google Play.

Per limitare l'accesso ampio allo spazio di archiviazione condiviso, Google Play Store ha aggiornato la propria norme per valutare le app destinate ad Android 11 (livello API 30) o versioni successive e richiedere accesso a tutti i file tramite l'autorizzazione MANAGE_EXTERNAL_STORAGE. Queste norme è in vigore da maggio 2021.

Se la tua app ha come target Android 11 o versioni successive e dichiara il MANAGE_EXTERNAL_STORAGE, Android Studio mostra l'avviso di lint che indica che è mostrato nella figura 1. Questo avviso ti ricorda che il Google Play Store ha un che limita l'uso dell'autorizzazione.

Figura 1. Avviso lint in Android Studio che ricorda agli sviluppatori Norme di Google Play relative al MANAGE_EXTERNAL_STORAGE autorizzazione.

Richiedi l'autorizzazione MANAGE_EXTERNAL_STORAGE solo quando la tua app non possono utilizzare in modo efficace le API che rispettano la privacy, come Storage Framework degli accessi o Contenuti multimediali API Store. Utilizzo dell'app dell'autorizzazione deve rientrare negli usi consentiti e deve essere direttamente collegata la funzionalità di base dell'app. Se la tua app include un caso d'uso in modo simile a uno dei seguenti, è probabile che possa richiedere Autorizzazione MANAGE_EXTERNAL_STORAGE:

  • Gestori di file
  • App di backup e ripristino
  • App antivirus
  • App di gestione di documenti
  • Ricerca di file sul dispositivo
  • Crittografia di file e dischi
  • Migrazione dei dati tra dispositivi