Android 11 (livello API 30) migliora ulteriormente la piattaforma, offrendo una migliore protezione ai dati delle app e degli utenti presenti nelle unità di archiviazione esterne. Questa release introduce diversi miglioramenti, come l'accesso ai percorsi dei file non elaborati, le operazioni di modifica in batch per i contenuti multimediali e una UI aggiornata per Storage Access Framework.
La release offre inoltre miglioramenti allo spazio di archiviazione basato su ambito, che consente agli sviluppatori di soddisfare più facilmente i casi d'uso dell'archiviazione dopo la migrazione a questo modello di archiviazione.
Applicazione forzata dell'archiviazione mirata
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 diverse directory 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 l'archiviazione basata sull'ambito 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 potrà 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, è possibile che i dati vengano archiviati in una directory a cui l'app non può accedere quando è attivo il modello di archiviazione con ambito. Prima di scegliere come target Android 11, esegui la migrazione dei dati a una directory compatibile con lo spazio di archiviazione con ambito.
Archiviazione con ambito di test
Per abilitare l'archiviazione mirata nella tua app, indipendentemente dai valori dei flag di compatibilità e della versione dell'SDK di destinazione dell'app, abilita i seguenti flag di compatibilità dell'app:
DEFAULT_SCOPED_STORAGE
(attivato per impostazione predefinita per tutte le app)FORCE_ENABLE_SCOPED_STORAGE
(disattivato per tutte le app per impostazione predefinita)
Per disabilitare l'archiviazione con ambito e utilizzare il modello di archiviazione legacy, annulla 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 per le app. Se la tua app ha bisogno di gestire lo spazio di archiviazione del dispositivo, segui le istruzioni su come eseguire query sullo spazio libero.
- Verifica la presenza di spazio libero richiamando
l'azione intent
ACTION_MANAGE_STORAGE
. Se non c'è abbastanza spazio libero sul dispositivo, chiedi all'utente di dare il tuo consenso per svuotare tutte le cache. Per farlo, richiama l'azione dell'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 sulla memoria esterna. Per accedere alla directory fornita dal sistema per la tua app, chiama il numero getExternalFilesDirs()
.
Accesso ai file multimediali
Per semplificare l'accesso ai contenuti multimediali rispettando la privacy dell'utente, Android 11 aggiunge le seguenti funzionalità.
Eseguire operazioni batch
Per garantire l'uniformità tra i dispositivi e una maggiore praticità per gli utenti, Android 11 aggiunge diversi metodi che semplificano la gestione di gruppi di file multimediali.
Accedi ai file utilizzando percorsi file diretti e librerie native
Per consentire alla tua app di funzionare più facilmente con le librerie multimediali di terze parti,
Android 11 ti consente di usare API diverse dall'API
MediaStore
per accedere ai
file multimediali dallo spazio di archiviazione condiviso utilizzando percorsi diretti dei file. 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 nelle loro directory di dati nello spazio di archiviazione interno. Le app destinate ad Android 9 o versioni successive non possono rendere i file nelle directory dei dati accessibili a livello mondiale.
Android 11 estende questa restrizione. Se la tua app ha come target Android 11, non può accedere ai file nella directory dei dati di un'altra app, anche se quest'ultima ha come target Android 8.1 (livello API 27) o versioni precedenti e ha reso i file nella sua directory dei dati leggibili pubblicamente.
Accesso a directory specifiche dell'app sull'unità di archiviazione esterna
Su Android 11, le app non possono più accedere ai file che si trovano in qualsiasi altra directory specifica dell'app all'interno dello spazio di archiviazione esterno.
Limitazioni di accesso ai documenti
Per dare agli sviluppatori il tempo per i test, le seguenti modifiche relative a Storage Access Framework (SAF) vengono applicate solo se la tua app è destinata ad Android 11 o versioni successive.
Accesso alle directory
Non puoi più utilizzare l'azione dell'intent ACTION_OPEN_DOCUMENT_TREE
per richiedere l'accesso alle seguenti directory:
- La directory root del volume di archiviazione interna.
- La directory root di ogni volume della scheda SD che il produttore del dispositivo considera affidabili, indipendentemente dal fatto che la scheda sia emulata o rimovibile. Un volume affidabile è quello a cui un'app può accedere la maggior parte delle volte.
- La directory
Download
.
Accesso ai file
Non puoi più utilizzare l'azione dell'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.
Prova la modifica
Per testare questa modifica del comportamento:
- Richiama un intent con l'azione
ACTION_OPEN_DOCUMENT
. Controlla che le directoryAndroid/data/
eAndroid/obb/
non vengano visualizzate entrambe. - Esegui una delle seguenti operazioni:
- Abilita il
flag di compatibilità dell'app
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Scegli come target Android 11 o versioni successive.
- Abilita il
flag di compatibilità dell'app
- Richiama un intent con l'azione
ACTION_OPEN_DOCUMENT_TREE
. Controlla che la directoryDownload
venga visualizzata e che il pulsante di azione associato alla directory non sia selezionabile.
Autorizzazioni
Android 11 introduce le seguenti modifiche relative alle autorizzazioni di archiviazione.
Scegli come target qualsiasi versione
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 lo spazio di archiviazione basato su 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 hanno l'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 l'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 di accesso a tutti i file.
Scegli come target Android 11
Se la tua app ha come target Android 11, sia l'autorizzazione
WRITE_EXTERNAL_STORAGE
sia quella privilegiata WRITE_MEDIA_STORAGE
non forniranno più accessi aggiuntivi.
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 lavori con i file multimediali nell'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 dei 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 di archiviazione rispettose della privacy. Android fornisce un accesso speciale per le app denominato Accesso a tutti i file in queste situazioni. Per ulteriori informazioni, 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, visualizza i seguenti materiali: