Aggiornamenti dello spazio di archiviazione in Android 11

Android 11 (livello API 30) migliora ulteriormente la piattaforma, dando maggiore protezione ai dati delle app e degli utenti sullo spazio di archiviazione esterno. Questa release introduce diversi miglioramenti, tra cui l'accesso al percorso dei file non elaborati, le operazioni di modifica in batch per i contenuti multimediali e un'interfaccia utente aggiornata per Storage Access Framework.

La release offre inoltre miglioramenti all'archiviazione con ambito, che consente agli sviluppatori di soddisfare più facilmente i casi d'uso dell'archiviazione dopo la migrazione all'utilizzo di questo modello di archiviazione.

Applicazione dell'archiviazione con ambito

Le app eseguite su Android 11, ma che hanno come target Android 10 (livello API 29) possono comunque richiedere l'attributo requestLegacyExternalStorage. Questo flag consente alle app di disattivare temporaneamente le modifiche associate all'archiviazione con ambito, ad esempio la concessione dell'accesso a directory diverse e diversi tipi di file multimediali. Dopo aver aggiornato l'app in modo che abbia come target Android 11, il sistema ignora il flag requestLegacyExternalStorage.

Mantenere la compatibilità con Android 10

Se la tua app disattiva l'archiviazione con ambito durante l'esecuzione su dispositivi Android 10, ti consigliamo di continuare a impostare requestLegacyExternalStorage su true nel file manifest dell'app. In questo modo la tua app può continuare a comportarsi come previsto sui dispositivi con Android 10.

Esegui la migrazione dei dati in directory visibili quando utilizzi l'archiviazione con ambito

Se la tua app utilizza il modello di archiviazione legacy e in precedenza aveva come target Android 10 o versioni precedenti, potresti archiviare i dati in una directory a cui l'app non può accedere quando il modello di archiviazione con ambito è abilitato. Prima di scegliere come target Android 11, esegui la migrazione dei dati in una directory compatibile con l'archiviazione con ambito.

Archiviazione con ambito di test

Per attivare l'archiviazione con ambito nella tua app, a prescindere dai valori della versione dell'SDK di destinazione e del flag manifest, abilita i seguenti flag di compatibilità dell'app:

Per disabilitare l'archiviazione con ambito e utilizzare invece il modello di archiviazione legacy, annulla la configurazione di entrambi i flag.

Gestione dello spazio di archiviazione del dispositivo

A partire da Android 11, le app che utilizzano il modello di archiviazione con ambito possono accedere solo ai propri file della cache specifici dell'app. Se l'app deve gestire lo spazio di archiviazione del dispositivo, segui le istruzioni su come eseguire query sullo spazio libero.

  1. Verifica se hai spazio libero richiamando l'azione per intent ACTION_MANAGE_STORAGE.
  2. Se non c'è abbastanza spazio libero sul dispositivo, chiedi all'utente di concedere alla tua app il consenso per svuotare tutte le cache. Per farlo, richiama l'azione per intent ACTION_CLEAR_APP_CACHE.

Directory specifica dell'app su unità di archiviazione esterna

A partire da Android 11, le app non possono creare una propria directory specifica dell'app sullo spazio di archiviazione esterno. Per accedere alla directory fornita dal sistema per la tua app, chiama getExternalFilesDirs().

Accesso ai file multimediali

Per semplificare l'accesso ai contenuti multimediali tutelando la privacy dell'utente, Android 11 aggiunge le seguenti funzionalità.

Eseguire operazioni batch

Per coerenza tra i dispositivi e maggiore praticità, Android 11 aggiunge diversi metodi che semplificano la gestione di gruppi di file multimediali.

Accedi ai file utilizzando percorsi diretti e librerie native

Per fare in modo che la tua app funzioni più facilmente con le librerie multimediali di terze parti, Android 11 ti consente di utilizzare API diverse dall'API MediaStore per accedere ai file multimediali dallo spazio di archiviazione condiviso tramite percorsi di file diretti. Queste API includono quanto segue:

  • L'API File.
  • Librerie native, come fopen().

Accesso ai dati di altre app

Per proteggere la privacy degli utenti, sui dispositivi con Android 11 o versioni successive, il sistema limita ulteriormente l'accesso della tua app alle directory private di altre app.

Accesso alle directory dei dati nella memoria interna

Android 9 (livello API 28) ha iniziato a limitare le app che potevano rendere accessibili ad altre app i file presenti nelle directory dei dati sullo spazio di archiviazione interno. Le app destinate ad Android 9 o versioni successive non possono rendere i file nelle loro directory dati accessibili in tutto il mondo.

Android 11 estende questa limitazione. Se la tua app ha come target Android 11, non può accedere ai file nella directory dei dati di qualsiasi altra app, anche se l'altra app ha come target Android 8.1 (livello API 27) o versioni precedenti e ha reso leggibili dal mondo i file nella sua directory dei dati.

Accesso a directory specifiche dell'app su dispositivi di archiviazione esterni

Su Android 11, le app non possono più accedere ai file contenuti in nessuna directory dedicata e specifica dell'app di altre app all'interno dello spazio di archiviazione esterno.

Limitazioni di accesso ai documenti

Per concedere agli sviluppatori il tempo per i test, le seguenti modifiche relative a Storage Access Framework (SAF) vengono applicate soltanto se la tua app ha come target Android 11 o versioni successive.

Accesso alle directory

Non puoi più utilizzare l'azione di intent ACTION_OPEN_DOCUMENT_TREE per richiedere l'accesso alle seguenti directory:

  • La directory principale del volume della memoria interna.
  • La directory root di ogni volume della scheda SD che il produttore del dispositivo considera affidabile, a prescindere dal fatto che la scheda sia emulata o rimovibile. Un volume affidabile è un volume a cui un'app può accedere correttamente nella maggior parte del tempo.
  • La directory Download.

Accesso ai file

Non puoi più utilizzare l'azione di intent ACTION_OPEN_DOCUMENT_TREE o ACTION_OPEN_DOCUMENT per richiedere all'utente di selezionare singoli file dalle seguenti directory:

  • La directory Android/data/ e tutte le sottodirectory.
  • La directory Android/obb/ e tutte le sottodirectory.

Testa la modifica

Per verificare questa modifica del comportamento:

  1. Richiamare un intent con l'azione ACTION_OPEN_DOCUMENT. Controlla che le directory Android/data/ e Android/obb/ non vengano visualizzate.
  2. Esegui una delle seguenti operazioni:
  3. Richiamare un intent con l'azione ACTION_OPEN_DOCUMENT_TREE. Verifica che la directory Download venga visualizzata e che il pulsante di azione associato alla directory non sia selezionabile.

Autorizzazioni

Android 11 introduce le seguenti modifiche relative alle autorizzazioni dello spazio di archiviazione.

Scegli come target qualsiasi versione

La prima finestra di dialogo presenta un link denominato Consenti nelle impostazioni
Figura 1. Finestra di dialogo mostrata quando un'app utilizza l'archiviazione con ambito e richiede l'autorizzazione READ_EXTERNAL_STORAGE.

Le seguenti modifiche vengono applicate in Android 11, indipendentemente dalla versione dell'SDK target dell'app:

  • L'autorizzazione di runtime Archiviazione è stata rinominata File e contenuti multimediali.
  • Se la tua app non ha disattivato l'archiviazione con ambito e richiede l'autorizzazione READ_EXTERNAL_STORAGE, gli utenti vedranno una finestra di dialogo diversa rispetto ad Android 10. La finestra di dialogo indica che l'app richiede l'accesso a foto e contenuti multimediali, come mostrato nella Figura 1.

    Gli utenti possono vedere quali app dispongono dell'autorizzazione READ_EXTERNAL_STORAGE nelle impostazioni di sistema. Nella pagina Impostazioni > Privacy > Gestione autorizzazioni > File e contenuti multimediali, ogni app che dispone dell'autorizzazione è elencata in Consentita per tutti i file. Se la tua app ha come target Android 11, tieni presente che questo accesso a "tutti i file" è di sola lettura. Per leggere e scrivere su tutti i file nello spazio di archiviazione condiviso utilizzando questa app, devi disporre dell'autorizzazione Accesso a tutti i file.

Android 11 target

Se la tua app ha come target Android 11, sia l'autorizzazione WRITE_EXTERNAL_STORAGE sia l'autorizzazione con privilegi WRITE_MEDIA_STORAGE non forniscono più alcun accesso aggiuntivo.

Tieni presente che, sui dispositivi con Android 10 (livello API 29) o versioni successive, la tua app può contribuire a raccolte multimediali ben definite, come MediaStore.Downloads, senza richiedere autorizzazioni relative allo spazio di archiviazione. Scopri di più su come richiedere solo le autorizzazioni necessarie quando si utilizzano file multimediali nella tua app.

Accesso a tutti i file

La maggior parte delle app che richiedono l'accesso allo spazio di archiviazione condiviso può seguire le best practice per la condivisione di file multimediali e la condivisione di file non multimediali. Tuttavia, alcune app hanno un caso d'uso principale che richiede l'accesso ampio ai file su un dispositivo, ma non possono farlo in modo efficiente utilizzando le best practice per l'archiviazione nel rispetto della privacy. In queste situazioni, Android offre un accesso speciale per le app denominato Accesso a tutti i file. Per ulteriori informazioni, consulta la guida su come gestire tutti i file su un dispositivo di archiviazione.

Risorse aggiuntive

Per maggiori informazioni sulle modifiche allo spazio di archiviazione in Android 11, visualizza i seguenti materiali:

Blog post

Video