Android 11 (livello API 30) migliora ulteriormente la piattaforma, offrendo una maggiore protezione dei dati utente e delle app sullo spazio di archiviazione esterno. Questa release introduce diversi miglioramenti, come l'accesso al percorso del file RAW, le operazioni di modifica in blocco per i contenuti multimediali e un'interfaccia utente aggiornata per Storage Access Framework.
La release offre anche miglioramenti all'archiviazione mirata, che semplifica agli sviluppatori la gestione dei casi d'uso di archiviazione dopo la migrazione a questo modello di archiviazione.
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'
requestLegacyExternalStorage
attributo. Questo flag consente alle app di disattivare temporaneamente le
modifiche associate
all'archiviazione mirata, ad esempio la concessione dell'accesso a directory e
tipi di file multimediali diversi. 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 mirata 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 che eseguono Android 10.
Eseguire la migrazione dei dati alle directory visibili quando si utilizza l'archiviazione mirata
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 la tua app non può accedere quando il modello di archiviazione mirata è attivato. Prima di scegliere come target Android 11, esegui la migrazione dei dati a una directory compatibile con l'archiviazione mirata.
Testare l'archiviazione mirata
Per attivare l'archiviazione mirata nella tua app, indipendentemente dalla versione dell'SDK di destinazione e dai valori dei flag del manifest, attiva i seguenti flag di compatibilità delle app:
DEFAULT_SCOPED_STORAGE(attivato per tutte le app per impostazione predefinita)FORCE_ENABLE_SCOPED_STORAGE(disattivato per tutte le app per impostazione predefinita)
Per disattivare l'archiviazione mirata e utilizzare il modello di archiviazione legacy, annulla l'impostazione di entrambi i flag.
Gestire lo spazio sul dispositivo
A partire da Android 11, le app che utilizzano il modello di archiviazione mirata possono accedere solo ai propri file della cache specifici dell'app. Se la tua app deve gestire lo spazio sul dispositivo, segui le istruzioni su come eseguire query sullo spazio libero.
- Controlla lo spazio libero richiamando l'
ACTION_MANAGE_STORAGEazione intent. Se non è disponibile spazio libero sufficiente sul dispositivo, chiedi all'utente di concedere alla tua app l'autorizzazione per cancellare 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 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 mantenendo 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 dei 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'
MediaStore API per accedere
ai file multimediali dallo spazio di archiviazione condiviso utilizzando percorsi di file
diretti. Queste API includono:
- L'API
File. - Librerie native, come
fopen().
Accesso ai dati di altre app
Per proteggere la privacy degli utenti, sui dispositivi che eseguono 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 sulla memoria interna
Android 9 (livello API 28) ha iniziato a limitare le app che potevano rendere i file nelle loro directory dei dati sullo spazio di archiviazione interno accessibili a livello globale ad altre app. Le app che hanno come target Android 9 o versioni successive non possono rendere i file nelle directory dei dati accessibili a livello globale.
Android 11 espande 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 a livello globale.
Accesso alle directory specifiche dell'app sullo spazio di archiviazione esterno
Su Android 11, le app non possono più accedere ai file nella directory dedicata e specifica dell'app di qualsiasi altra app all'interno dello spazio di archiviazione 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) vengono applicate solo se la tua app ha come target Android 11 o versioni successive.
Accesso alle directory
Non puoi più utilizzare l'
ACTION_OPEN_DOCUMENT_TREE
azione intent per richiedere l'accesso alle seguenti directory:
- La directory principale del volume di memoria interna.
- 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 delle volte.
- 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 sottodirectory. - La directory
Android/obb/e tutte le sottodirectory.
Testare la modifica
Per testare questa modifica del comportamento:
- Richiama un intent con l'azione
ACTION_OPEN_DOCUMENT. Verifica che le directoryAndroid/data/eAndroid/obb/non vengano visualizzate. - Esegui una delle seguenti operazioni:
- Attiva il
RESTRICT_STORAGE_ACCESS_FRAMEWORKflag di compatibilità delle app. - Scegli come target Android 11 o versioni successive.
- Attiva il
- Richiama un intent con l'azione
ACTION_OPEN_DOCUMENT_TREE. Verifica che la directoryDownloadvenga 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.
Scegliere come target qualsiasi versione
READ_EXTERNAL_STORAGE.Le seguenti modifiche vengono applicate 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 mirata 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 sta richiedendo l'accesso a foto e contenuti multimediali, come mostrato nella Figura 1.Gli utenti possono vedere quali app hanno l'autorizzazione
READ_EXTERNAL_STORAGEnelle impostazioni di sistema. Nella pagina Impostazioni > Privacy > Gestione autorizzazioni > File e contenuti multimediali, ogni app che dispone dell' autorizzazione è elencata in 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 tutti i file nello spazio di archiviazione condiviso utilizzando questa app, devi disporre dell'autorizzazione di accesso a tutti i file.
Scegliere come 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 che eseguono 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 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 alle 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: