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 | Sì |
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 successiveREAD_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 | Sì |
Database | Dati strutturati | Libreria di persistenza della sala | Nessuno | No | Sì |
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.