Aggiornamenti dello spazio di archiviazione in Android 11

Android 11 (livello API 30) migliora ulteriormente la piattaforma, offrendo una protezione migliore per i dati delle app e degli utenti sulla memoria esterna. Questa release introduce diversi miglioramenti, come l'accesso al percorso dei file non elaborati, operazioni di modifica batch per i contenuti multimediali e un'interfaccia utente aggiornata per Storage Access Framework.

La release offre anche miglioramenti allo storage con ambito, che semplifica agli sviluppatori la realizzazione dei loro casi d'uso dello storage dopo la migrazione a questo modello di storage.

Applicazione dell'archiviazione mirata

Le app che vengono eseguite su Android 11 ma 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 allo spazio di archiviazione isolato, ad esempio la concessione dell'accesso a directory diverse e a 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 lo spazio di archiviazione isolato quando viene eseguita 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.

Migrare i dati in directory visibili quando si utilizza lo spazio di archiviazione isolato

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

Testare l'archiviazione mirata

Per attivare l'archiviazione isolata nella tua app, indipendentemente dalla versione dell'SDK target e dai valori dei flag manifest, attiva i seguenti flag di compatibilità dell'app:

Per disattivare lo spazio di archiviazione isolato e utilizzare invece il modello di archiviazione precedente, annulla l'impostazione di entrambi i flag.

Gestione dello spazio di archiviazione del dispositivo

A partire da Android 11, le app che utilizzano il modello di spazio di archiviazione isolato possono accedere solo ai propri file di cache specifici dell'app. Se la tua app deve gestire lo spazio di archiviazione del dispositivo, segui le istruzioni su come interrogare lo spazio libero.

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

Directory specifica dell'app sullo spazio di archiviazione esterno

A partire da Android 11, le app non possono creare una 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 mantenendo la privacy degli utenti, Android 11 aggiunge le seguenti funzionalità.

Eseguire operazioni batch

Per garantire la coerenza tra i dispositivi e una maggiore comodità per gli utenti, Android 11 aggiunge diversi metodi che semplificano la gestione di gruppi di file multimediali.

Accedere ai file utilizzando percorsi di file diretti e librerie native

Per consentire alla tua app di funzionare in modo più fluido con le librerie multimediali di terze parti, Android 11 ti consente di utilizzare API diverse dall'API MediaStore per accedere ai file multimediali dall'archivio condiviso utilizzando percorsi di file diretti. Queste API includono:

  • L'API File.
  • Librerie native, ad esempio 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 di dati nella memoria interna

Android 9 (livello API 28) ha iniziato a limitare le app che potevano rendere accessibili ad altre app i file nelle directory di dati nella memoria interna. Le app che hanno come target Android 9 o versioni successive non possono rendere accessibili a tutti i file nelle directory di dati.

Android 11 amplia 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 i file nella directory dei dati leggibili da tutti.

Accesso a directory specifiche dell'app sullo spazio di archiviazione esterno

Su Android 11, le app non possono più accedere ai file in nessun'altra directory dedicata e specifica dell'app all'interno dell'archivio esterno.

Limitazioni di accesso ai documenti

Per dare agli sviluppatori il tempo di eseguire i test, le seguenti modifiche relative a Storage Access Framework (SAF) entrano in vigore solo se la tua app ha come target Android 11 o versioni successive.

Accesso alle directory

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

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

Accesso ai file

Non puoi più utilizzare l'azione 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 relative sottodirectory.
  • La directory Android/obb/ e tutte le relative sottodirectory.

Testare la modifica

Per testare questa modifica del comportamento:

  1. Richiama 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. Richiama un intent con l'azione ACTION_OPEN_DOCUMENT_TREE. Verifica che venga visualizzata la directory Download e che il pulsante di azione associato alla directory sia disattivato.

Autorizzazioni

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

Targeting di qualsiasi versione

La prima finestra di dialogo presenta un link chiamato Consenti nelle impostazioni
Figura 1. Finestra di dialogo visualizzata quando un'app utilizza l'archiviazione mirata e richiede l'autorizzazione READ_EXTERNAL_STORAGE.

Le seguenti modifiche entrano in vigore in Android 11, indipendentemente dalla versione dell'SDK di destinazione della tua app:

  • L'autorizzazione di runtime Spazio di archiviazione viene rinominata in File e contenuti multimediali.
  • Se la tua app non ha disattivato l'archiviazione isolata e richiede l'autorizzazione READ_EXTERNAL_STORAGE, gli utenti vedono una finestra di dialogo diversa rispetto ad Android 10. La finestra di dialogo indica che la tua 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 nella sezione Consentito 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 in tutti i file dell'archiviazione condivisa utilizzando questa app, devi disporre dell'autorizzazione Accesso a tutti i file.

Android 11 di destinazione

Se la tua app ha come target Android 11, sia l'autorizzazione WRITE_EXTERNAL_STORAGE sia l'autorizzazione WRITE_MEDIA_STORAGE con privilegi 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 utilizzi i 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 un ampio accesso ai file su un dispositivo, ma non possono farlo in modo efficiente utilizzando le best practice di archiviazione rispettose della privacy. Android fornisce un accesso speciale per le app chiamato Accesso a tutti i file per queste situazioni. Per saperne di più, consulta la guida su come gestire tutti i file su un dispositivo di archiviazione.

Risorse aggiuntive

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

Post del blog

Video