Android 11 (livello API 30) migliora ulteriormente la piattaforma, offrendo una protezione migliore ai dati delle app e degli utenti sull'archiviazione esterna. Questa release introduce diversi miglioramenti, come l'accesso al percorso del file non elaborato, le operazioni di modifica collettiva per i contenuti multimediali e un'interfaccia utente aggiornata per Storage Access Framework.
La release offre anche miglioramenti allo spazio di archiviazione basato su ambiti, che semplificano per gli sviluppatori la soddisfazione dei loro casi d'uso dello spazio di archiviazione dopo la migrazione a questo modello di archiviazione.
Applicazione delle norme relative allo spazio di archiviazione basata sugli ambiti
Le app che funzionano 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 delimitato, 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 limitato quando viene eseguita su dispositivi Android 10, ti consigliamo di continuare a impostare requestLegacyExternalStorage
su true
nel file manifest della tua app. In questo modo, la tua app può continuare a comportarsi come previsto su dispositivi con Android 10.
Esegui la migrazione dei dati nelle directory visibili quando utilizzi lo spazio di archiviazione limitato
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 delimitata. Prima di scegliere come target Android 11, esegui la migrazione dei dati in una directory compatibile con lo spazio archiviazione limitato.
Testare lo spazio di archiviazione limitato
Per attivare lo spazio di archiviazione delimitato nella tua app, indipendentemente dalla versione dell'SDK di destinazione e dai valori dei flag manifest, attiva i seguenti flag di compatibilità dell'app:
DEFAULT_SCOPED_STORAGE
(attivato per impostazione predefinita per tutte le app)FORCE_ENABLE_SCOPED_STORAGE
(disattivata per tutte le app per impostazione predefinita)
Per disattivare lo spazio di archiviazione basato sugli ambiti e utilizzare il modello di archiviazione precedente, reimposta entrambi i flag.
Gestione dello spazio di archiviazione del dispositivo
A partire da Android 11, le app che utilizzano il modello di archiviazione basato sugli ambiti 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 eseguire query sullo spazio libero.
- Controlla lo spazio libero richiamando l'azione di intent
ACTION_MANAGE_STORAGE
. Se sul dispositivo non è disponibile spazio libero sufficiente, chiedi all'utente di dare all'app il consenso per svuotare tutte le cache. Per farlo, invoca l'azione dell'intent
ACTION_CLEAR_APP_CACHE
.
Directory specifica dell'app sullo spazio di archiviazione esterno
A partire da Android 11, le app non possono creare la propria
directory specifica per 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 rispettando la privacy degli utenti, Android 11 aggiunge le seguenti funzionalità.
Eseguire operazioni batch
Per garantire la coerenza tra i dispositivi e una maggiore praticità 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 più agevolmente con 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 utilizzando percorsi di file diretti. Queste API includeranno:
- 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 sullo spazio di archiviazione interno
Android 9 (Livello API 28) ha iniziato a limitare le app che potevano rendere accessibili a tutte le altre app i file nelle directory dei dati nella memoria interna. Le app destinate ad Android 9 o versioni successive non possono rendere accessibili a tutti i file nelle loro 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 altre app, anche se l'altra app ha come target Android 8.1 (livello API 27) o versioni precedenti e ha impostato i file nella directory dei dati come leggibili da tutti.
Accesso a directory specifiche per app sullo spazio di archiviazione esterno
Su Android 11, le app non possono più accedere ai file nella directory di altre app dedicata e specifica per l'app all'interno dello spazio di archiviazione esterno.
Restrizioni di accesso ai documenti
Per dare agli sviluppatori il tempo di eseguire i test, le seguenti modifiche relative allo Storage Access Framework (SAF) vengono applicate solo 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 home directory di ogni volume della scheda SD considerata attendibile dal produttore del dispositivo, 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 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 testare questa modifica del comportamento:
- Richiama un'intenzione con l'azione
ACTION_OPEN_DOCUMENT
. Verifica che le directoryAndroid/data/
eAndroid/obb/
non vengano visualizzate. - Esegui una delle seguenti operazioni:
- Attiva il flag di compatibilità delle app
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Target Android 11 o versioni successive.
- Attiva il flag di compatibilità delle app
- Richiama un'intenzione con l'azione
ACTION_OPEN_DOCUMENT_TREE
. Verifica che la directoryDownload
venga visualizzata e che il pulsante di azione associato alla directory sia disattivato.
Autorizzazioni
Android 11 introduce le seguenti modifiche relative alle autorizzazioni di accesso allo spazio di archiviazione.
Scegli come target qualsiasi versione
Le seguenti modifiche vengono applicate in Android 11, indipendentemente dalla versione dell'SDK target della tua app:
- L'autorizzazione di runtime Spazio di archiviazione viene rinominata in File e contenuti multimediali.
Se la tua app non ha disattivato lo spazio di 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 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 in Consentite 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 dello spazio di archiviazione condiviso utilizzando questa app, devi disporre dell'autorizzazione di accesso a tutti i file.
Target Android 11
Se la tua app ha come target Android 11, sia l'autorizzazione WRITE_EXTERNAL_STORAGE
sia l'autorizzazione privilegiata 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 comeMediaStore.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 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 di archiviazione rispettose della privacy. Per queste situazioni, Android fornisce un accesso speciale per le app chiamato Accesso a tutti i file. Per scoprire 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: