Android Uso dell'archiviazione esterna


Esempio

L'archiviazione "esterna" è un altro tipo di archiviazione che è possibile utilizzare per salvare i file sul dispositivo dell'utente. Ha alcune differenze chiave rispetto allo storage "interno", vale a dire:

  • Non è sempre disponibile. Nel caso di un supporto rimovibile (scheda SD), l'utente può semplicemente rimuovere la memoria.
  • Non è privato. L'utente (e altre applicazioni) hanno accesso a questi file.
  • Se l'utente disinstalla l'app, i file salvati nella directory recuperata con getExternalFilesDir() verranno rimossi.

Per utilizzare Storage esterno, dobbiamo prima ottenere le autorizzazioni appropriate. Dovrai usare:

Per concedere queste autorizzazioni, dovrai identificarle nel tuo AndroidManifest.xml come tale

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

NOTA: poiché si tratta di autorizzazioni pericolose se si utilizza API di livello 23 o superiore, sarà necessario richiedere le autorizzazioni in fase di runtime .

Prima di tentare di scrivere o leggere da Storage esterno, è necessario verificare sempre che il supporto di memorizzazione sia disponibile.

String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
    // Available to read and write
}
if (state.equals(Environment.MEDIA_MOUNTED) || 
        state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
    // Available to at least read
}

Quando si scrivono file nell'archivio esterno, è necessario decidere se il file deve essere riconosciuto come pubblico o privato. Sebbene entrambi questi tipi di file siano ancora accessibili all'utente e ad altre applicazioni sul dispositivo, esiste una distinzione fondamentale tra di essi.

I file pubblici devono rimanere sul dispositivo quando l'utente disinstalla l'app. Un esempio di un file che dovrebbe essere salvato come pubblico sarebbero le foto che sono state prese attraverso la tua applicazione.

I file privati ​​devono essere rimossi tutti quando l'utente disinstalla l'app. Questi tipi di file potrebbero essere specifici per le app e non essere utili all'utente o ad altre applicazioni. Ex. file temporanei scaricati / utilizzati dalla tua applicazione.

Ecco come accedere alla directory Documents per file pubblici e privati.

Pubblico

// Access your app's directory in the device's Public documents directory
File docs = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOCUMENTS), "YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();

Privato

// Access your app's Private documents directory
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), 
        "YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();