Panoramica dell'archiviazione di dati e file

Android utilizza un file system simile a quelli basati su disco piattaforme di terze parti. Il sistema offre diverse opzioni per salvare i dati dell'app:

  • Spazio di archiviazione specifico per l'app:archivia i file destinati esclusivamente all'utilizzo da parte dell'app, in directory dedicate, all'interno di un volume di memoria interna, dedicate all'archiviazione esterna. Utilizza le directory all'interno memoria interna per salvare informazioni sensibili a cui altre app non dovrebbero accedere.
  • Spazio di archiviazione condiviso:archivia i file che la tua app intende condividere con altri app, inclusi contenuti multimediali, documenti e altri file.
  • Preferenze: archivia dati primitivi privati in coppie chiave-valore.
  • Database:archivia i dati strutturati in un database privato utilizzando la stanza libreria di persistenza.

Le caratteristiche di queste opzioni sono riassunte nella seguente tabella:

Tipo di contenuti Metodo di accesso Autorizzazioni richieste Altre app possono accedere? Il file è stato rimosso al momento della disinstallazione dell'app?
Specifici per app file File destinati esclusivamente all'utilizzo dell'app Dalla memoria interna, getFilesDir() o getCacheDir()

Dalla memoria esterna, getExternalFilesDir() o getExternalCacheDir()
Non necessaria per l'archiviazione interna

Non necessaria per l'archiviazione esterna spazio di archiviazione quando la tua app viene usata su dispositivi con Android 4.4 (livello API 19) o successiva
No
Media File multimediali condivisibili (immagini, file audio, video) API MediaStore READ_EXTERNAL_STORAGE quando si accede ad altre app file attivi Android 11 (livello API 30) o versioni successive

READ_EXTERNAL_STORAGE oppure WRITE_EXTERNAL_STORAGE quando si accede ad altre app file su Android 10 (livello API 29)

Le autorizzazioni sono necessarie per tutti i file su Android 9 (livello API 28) oppure inferiore
Sì, anche se l'altra app richiede READ_EXTERNAL_STORAGE autorizzazione No
Documenti e altri file Altri tipi di contenuti condivisibili, inclusi i file scaricati. Framework di accesso allo spazio di archiviazione Nessuno Sì, tramite il selettore file di sistema No
App preferenze Coppie chiave-valore Jetpack Raccolta delle preferenze Nessuno No
Database Dati strutturati Libreria di persistenza della sala Nessuno No

La soluzione che scegli dipende dalle tue esigenze specifiche:

Quanto spazio richiedono i tuoi dati?
La memoria interna ha uno spazio limitato per i dati specifici dell'app. Utilizza altri tipi di spazio di archiviazione se devi risparmiare una notevole quantità di dati.
Quanto deve essere affidabile l'accesso ai dati?
Se le funzionalità di base dell'app richiedono determinati dati, ad esempio quando l'app inserire i dati nella directory della memoria interna o in un database. I file specifici delle app archiviati in una memoria esterna non sono sempre accessibili perché alcuni dispositivi consentono agli utenti di rimuovere un dispositivo fisico corrispondente dispositivo di archiviazione esterno.
Che tipo di dati devi archiviare?
Se hai dati significativi solo per la tua app, usa dati specifici dell'app archiviazione. Per i contenuti multimediali condivisibili, usa lo spazio di archiviazione condiviso per consentire ad altre app accedere ai contenuti. Per i dati strutturati, utilizza una delle due preferenze (per le coppie chiave-valore) ) o un database (per i dati con più di due colonne).
I dati devono essere privati per la tua app?
Quando si archiviano dati sensibili, che non dovrebbero essere accessibili ad altri utilizzare la memoria interna, le preferenze o un database. La memoria interna ha il vantaggio aggiuntivo di nascondere i dati agli utenti.

Categorie di posizioni di archiviazione

Android offre due tipi di posizioni di archiviazione fisica: memoria interna e unità di archiviazione esterna. Sulla maggior parte dei dispositivi, la memoria interna è di dimensioni inferiori a quelle esterne archiviazione. Tuttavia, la memoria interna è sempre disponibile su tutti i dispositivi, una posizione più affidabile in cui inserire i dati da cui dipende la tua app.

I volumi rimovibili, ad esempio una scheda SD, sono visualizzati nel file system come parte di dispositivo di archiviazione esterno. Android rappresenta questi dispositivi tramite un percorso, /sdcard.

Per impostazione predefinita, le app vengono archiviate nella memoria interna. Se le dimensioni dell'APK è molto grande, ma puoi indicare una preferenza nel file manifest dell'app per installare l'app su una memoria esterna:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

Autorizzazioni e accesso a unità di archiviazione esterna

Android definisce le seguenti autorizzazioni relative allo spazio di archiviazione: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, e MANAGE_EXTERNAL_STORAGE

Nelle versioni precedenti di Android, le app dovevano dichiarare Autorizzazione di READ_EXTERNAL_STORAGE per accedere a file al di fuori specifici dell'app sulla memoria esterna. Inoltre, le app dovevano dichiarare l'autorizzazione WRITE_EXTERNAL_STORAGE per scrivere qualsiasi file al di fuori della directory specifica dell'app.

Le versioni più recenti di Android si basano più sullo scopo di un file che sulla sua posizione per determinare la capacità di un'app di accedere e scrivere su un determinato file. Nella In particolare, se la tua app ha come target Android 11 (livello API 30) o versioni successive, L'autorizzazione WRITE_EXTERNAL_STORAGE non ha alcun effetto sulle proprietà della tua app l'accesso allo spazio di archiviazione. Questo modello di archiviazione basato su finalità migliora la privacy dell'utente perché alle app viene dato accesso soltanto alle aree del file system del dispositivo che che effettivamente usano.

Android 11 introduce l'autorizzazione MANAGE_EXTERNAL_STORAGE, che fornisce accesso in scrittura a file esterni alla directory specifica dell'app e a MediaStore. A scopri di più su questa autorizzazione e sul motivo per cui non è necessario dichiararla per la maggior parte delle app per soddisfare i loro casi d'uso, consulta la guida su come gestire tutti file su un dispositivo di archiviazione.

Archiviazione con ambito

Per dare agli utenti un maggiore controllo sui loro file e per limitare il disordine dei file, le app che Android 10 (livello API 29) e versioni successive target di Android 10 riceve un accesso limitato ai dati o archiviazione con ambito, per impostazione predefinita. Queste app hanno accesso soltanto ai specifiche delle app su dispositivi di archiviazione esterni, nonché tipi specifici di supporti creato dall'app.

Utilizza l'archiviazione con ambito, a meno che la tua app non abbia bisogno di accedere a un file archiviato all'esterno di una directory specifica dell'app e all'esterno di una directory di cui MediaStore Le API possono accedere. Se archivi file specifici delle app su dispositivi di archiviazione esterni, puoi: semplifica l'adozione dell'archiviazione con ambito posizionando questi file in un specifica per un'app su server spazio di archiviazione. In questo modo, la tua app conserva l'accesso a questi file quando l'archiviazione con ambito è abilitata.

Per preparare la tua app all'archiviazione con ambito, consulta i casi d'uso relativi allo spazio di archiviazione e alle best practice. Se la tua app ha un altro utilizzo caso non coperto dall'archiviazione con ambito, invia una richiesta richiesta. Puoi disattivare temporaneamente l'utilizzo degli ambiti spazio di archiviazione.

Visualizzare i file su un dispositivo

Per visualizzare i file archiviati su un dispositivo, utilizza la sezione File del dispositivo di Android Studio Spazio di esplorazione.

Risorse aggiuntive

Per ulteriori informazioni sull'archiviazione dei dati, consulta le risorse seguenti.

Video