2009-07-30 17 views
29

C'è un modo per memorizzare i dati delle applicazioni Android sulla scheda SD anziché nella memoria interna? So come trasferire il database sqlite dell'applicazione dalla memoria interna alla SDCard, ma cosa succede se la memoria interna si riempie in primo luogo? Come lo gestiscono tutti?memorizzazione dei dati dell'applicazione Android su scheda SD

risposta

9

Attenzione: Questa risposta è obsoleta. È necessario utilizzare Environment.getExternalStorageDirectory() per ottenere il percorso root della scheda SD come indicato nelle risposte di seguito.

Vecchio risposta in modo che i commenti su questo ha senso:

Aggiunta /sdcard/ alla radice il vostro percorso dovrebbe dirigere l'applicazione Android per utilizzare la scheda SD (almeno funziona in questo modo con il G1). Gli oggetti del file system di Android ti danno la possibilità di controllare le dimensioni dei file ... quindi dovrebbe essere possibile (se difficile) scrivere un codice di fail-over. Questo codice dovrebbe regolare il percorso di root se la memoria interna si riempiva.

+0

come si fa a regolare il percorso principale? – user121196

+0

Regola il percorso root che stai utilizzando. (Che era un po 'di confusione ... non è possibile modificare il percorso root di Android) – haseman

+0

Sto usando SQLiteDatabase per creare il database, tuttavia l'argomento del nome del costruttore non può contenere un percorso, come è possibile che io crei il database sulla sdcard? – user121196

2

Il problema con l'utilizzo della SDCard è che non si può assumere in modo affidabile che sarà presente sempre quando l'applicazione ne ha bisogno. Questo non è il caso con la memoria interna. Finché l'applicazione non si basa su questi dati per eseguirlo dovrebbe andare bene.

76

È consigliabile utilizzare lo Environment.getExternalStorageDirectory() piuttosto che il codice "/ sdcard" Non è sempre sicuro che il nome della cartella verrà chiamato così. Inoltre, la classe Environment offre un metodo getExternalStorageState() per verificare se la memoria esterna è disponibile.

+1

Questo non funziona sempre perché apparentemente la posizione della scheda SD * reale * di Samsung è 'Environment.getExternalStorageDirectory() +"/external_sd "'. Altri dispositivi avranno posizioni diverse. – Muz

13

Ecco un altro piccolo trucco. Lo Application ha un numero di metodi chiamati per acquisire percorsi. In particolare l'applicazione ha il metodo getDatabasePath con viene utilizzato da SQLiteOpenHelper per costruire il percorso. Una classe di applicazione personalizzata può sovrascrivere questi metodi per fornire percorsi diversi compresi i percorsi nello getExternalStorageDirectory.

La memoria esterna è specifica dell'applicazione o pubblica. Esistono vari metodi, che sostituiscono il meccanismo getExternalStorageDirectory, getExternalFilesDir() e getExternalStoragePublicDirectory() rispettivamente.

3

alcuni dispositivi utilizzano/mnt/sdcard come punto di origine della scheda SD.

33

Per iniziare:

A seconda del modello/OS, è possibile accedere alla directory principale della scheda SD con:

File externalStorage = Environment.getExternalStorageDirectory(); 

Questo farà riferimento alla memoria sd interna o la memoria SD interna.

externalStorage.getAbsolutePath() 

restituisce uno dei seguenti valori

"/ sdcard /" o "/ mnt/sdcard /"

Per accedere alla memoria esterna SD o micro SD, che di solito si collega dall'esterno del telefono/tablet, è necessario utilizzare una delle seguenti cartelle create da Android per puntare alla memoria esterna:

"/mnt/sdcard/sd" 
"/mnt/sdcard/external_sd" 

"/sdcard/external_sd" 
"/sdcard/sd" 

"/mnt/sdcard/" 

ps: si può notare una cartella vuota external_sd o sd sulla sdcard interna

memoria, questa cartella è vuota e la sua usato per indicare scheda micro sd esterna.

al termine assicurarsi di avere accesso in lettura/scrittura alla scheda SD android.permission.WRITE_EXTERNAL_STORAGE nel file manifest android xml.

finalmente è necessario specificare il nome del file e il vostro pronto

private SQLiteDatabase DB = null; 

private static final String DATABASE_NAME = "MyDb.db"; 
//////////// 
File sdcard = Environment.getExternalStorageDirectory(); 

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME; 

DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
/////////// 

e il vostro pronto ad andare ...

+1

Sfortunatamente, questo non è assolutamente standard. Sul LG Optimus è in/mnt/sdcard/_ExternalSD. Spero che qualcuno su google rivedrà tutto questo. Il nome dei media è così brutto (esterno ???) e i documenti non dicono una parola su come accedere alla seconda sdcard quando ce n'è una integrata. – Snicolas

+0

Puoi aiutare a ottenere il nome di tutte le cartelle presenti nella scheda SD. –

Problemi correlati