Senza categoria

[DEV] – Accesso alla scheda SD

Molto spesso le applicazioni hanno la necessità di accedere alla scheda di memoria per leggere / scrivere dati (si pensi alla fotocamera che deve sapere dove memorizzare le immagini o il lettore multimediale per leggere i file musicali).

Dal punto di vista applicativo, prima di accedere alla scheda di memoria per poter leggere o scrivere dati è necessario verificare lo stato della SD, infatti non è detto che il dispositivo android sul quale sta girando l’applicazione in quel momento abbia o meno la scheda SD oppure che questa sia disponibile (si pensi ad esempio quando il terminale è collegato via USB al PC e la scheda è smontata). Per fare questo tipo di operazione android mette a disposizione la classe android.os.Environment

Innanzitutto, per verificare lo stato della SD è possibile utilizzare questo metodo:

[code lang=”java”]

String state = Environment.getExternalStorageState();

[/code]

dove la stringa state può assumere uno dei seguenti valori:

  • MEDIA_BAD_REMOVAL : Se la scheda è stata rimossa male (rimossa senza averne fatto l’unmount)
  • MEDIA_CHECKING : La scheda è presente ma è sotto verifica da parte del sistema
  • MEDIA_MOUNTED : La scheda è disponibile e montata correttamente. E’ possibile leggere e scrivere sulla scheda
  • MEDIA_MOUNTED_READ_ONLY : La scheda è disponibile ma è accedibile in sola lettura (la scheda è write-protected)
  • MEDIA_NOFS : La scheda è presenta ma non formattata
  • MEDIA_REMOVED : La scheda non è presente
  • MEDIA_SHARED : la scheda è presente ma non montata (condivisa tramite porta USB)
  • MEDIA_UNMONTABLE : La scheda è presente ma per qualche motivo non può essere montata
  • MEDIA_UNMONTED : La scheda è presente ma non è montata

Chiaramente lo stato che ci interessa per poter scrivere i dati sulla scheda è MEDIA_MOUNTED, mentre se abbiamo bisogno solo di leggere è sufficiente anche MEDIA_MOUNTED_READ_ONLY.
Successivamente, per poter verificare applicativamente la presenza della scheda SD è possibile utilizzare questo snippet:

[code lang=”java”]

String sdPath = Environment.getExternalStorageDirectory();

[/code]

Che restituisce un oggetto java.io.File che rappresenta la cartella dove è montata la scheda SD ( se la scheda non è presente o non disponibile il metodo exists()  della classe File restituisce false)

Aspettando FroYo

Nella nuvoa versione di android  viene introdotto un concetto di cartelle “standard” dove memorizzare i file dell’applicazione a seconda della loro natura (file immagine, file musicali, …) Alle classe Context vengono aggiunte altre API per il recupero delle cartelle “standard” dove memorizzare questi particolari tipi di dati.

Da premettere che in android ad ogni applicazione è associata una cartella dove poter memorizzare i propri file che il sistema cancella quando l’applicazione viene disinstallata. Tutti i file che sono privati dell’applicazione dovrebbero essere memorizzati all’interno della cartella indicata dal metodo

[code lang=”java”]

Context.getExternalStoragePublicDirectory(String type)

[/code]

Il sistema si occuperà di rimuovere i files una volta che l’applicazione sarà rimossa. Il parametro type rappresenta il tipo di dato che si intende memorizzare e può assumere uno tra i seguenti valori:

  • DIRECTORY_MUSIC
  • DIRECTORY_PODCASTS
  • DIRECTORY_RINGTONES
  • DIRECTORY_ALARMS
  • DIRECTORY_NOTIFICATIONS
  • DIRECTORY_PICTURES
  • DIRECTORY_MOVIES
  • DIRECTORY_DOWNLOADS
  • DIRECTORY_DCIM

Ogni path associato ad uno di questi tipi è simile a:

<mountSD>/Android/data/ <package dell’applicazione> / files / <Type>

dove :

  1. mountSD rappresenta il path dove è montata la scheda (tipicamene /sdcard)
  2. il package dell’applicazione – è quello indicato nel AndroidManifest.xml
  3. Type è una delle costanti indicate prima.

In questo modo ogni applicazione può avere dei path di defatult dove memorizzare i propri dati. Come detto in precedenza è bene tenere presente tre cose:

  • Questi file sono privati dell’applicazione e quindi le altre applicazioni non ci possono accedere applicativamente (E’ chiaro che un file manager che naviga sul file system le può vedere)
  • I files memorizzati in queste cartelle vengono cancellati quando si disinstalla l’applicazione.
  • Non è obbligatorio (ma comincia a diventare uno standard) utilizzare quelle cartelle al posto di path inventati dall’applicazione.
Comments

TuttoTech, il tuo nuovo punto di riferimento per la tecnologia

2017 © TuttoTech.net di Mikhael Costa - MK Media S.r.l. c.r. - P.Iva: 08123000963 Tutti i marchi riportati appartengono ai legittimi proprietari.

To Top