2009-07-30 24 views
29

¿Hay alguna manera de almacenar datos de aplicaciones de Android en la tarjeta SD en lugar de en la memoria interna? Sé cómo transferir la base de datos sqlite de la aplicación de la memoria interna a la tarjeta SD, pero ¿qué pasa si la memoria interna se llena en primer lugar? ¿Cómo manejan esto todos?almacenamiento de datos de la aplicación Android en la tarjeta SD

Respuesta

9

Advertencia: Esta respuesta no está actualizada. Debe usar Environment.getExternalStorageDirectory() para obtener la ruta raíz de la tarjeta SD como se menciona en las respuestas a continuación.

respuesta Viejo por lo que los comentarios sobre esto sentido:

Adición /sdcard/ a la raíz de su trayectoria debe dirigir su aplicación Android para utilizar la tarjeta SD (al menos funciona de esa manera con el G1). Los objetos del sistema de archivos de Android le dan la capacidad de verificar el tamaño de los archivos ... por lo que debería ser posible (si es difícil) escribir algún código de fail-over. Este código ajustaría su ruta raíz si la memoria interna se llenara.

+0

¿cómo ajustar la ruta de raíz? – user121196

+0

Ajuste la ruta de acceso de raíz que está utilizando. (Eso fue un poco confuso ... no se puede alterar la ruta raíz de Android) – haseman

+0

Estoy usando SQLiteDatabase para crear la base de datos, sin embargo, el argumento del nombre de su constructor no puede contener una ruta, ¿cómo es posible que yo cree la base de datos en la tarjeta sd? – user121196

2

El problema con el uso de la tarjeta SD es que no puede suponer con seguridad que estará presente siempre que su aplicación lo necesite. Este no es el caso con la memoria interna. Siempre que su aplicación no dependa de estos datos para funcionar, debería estar bien.

76

Es mejor usar Environment.getExternalStorageDirectory() que codificar "/ sdcard" No siempre es seguro que el nombre de la carpeta se llame así. Además, la clase Environment ofrece un método getExternalStorageState() para verificar si el almacenamiento externo está disponible.

+1

Esto no siempre funciona porque aparentemente la ubicación de la tarjeta SD * real * de Samsung es 'Environment.getExternalStorageDirectory() +"/external_sd "'. Otros dispositivos tendrán diferentes ubicaciones. – Muz

13

Aquí hay otro pequeño truco. El Application tiene una serie de métodos que se llaman para adquirir rutas. En particular, la aplicación tiene el método getDatabasePath con es utilizado por SQLiteOpenHelper para construir la ruta. Una clase de aplicación personalizada puede anular estos métodos para proporcionar diferentes rutas, incluidas las rutas en el getExternalStorageDirectory.

El almacenamiento externo es específico de la aplicación o público. Existen métodos que reemplazan el mecanismo getExternalStorageDirectory, getExternalFilesDir() y getExternalStoragePublicDirectory() respectivamente.

3

algunos dispositivos utilizan/mnt/sdcard como punto raíz de la tarjeta SD.

33

para comenzar:

Dependiendo del modelo/os, se puede acceder al directorio raíz de la tarjeta SD con:

File externalStorage = Environment.getExternalStorageDirectory(); 

Esto se referirá al almacenamiento SD interna o la memoria SD interna.

externalStorage.getAbsolutePath() 

devolverá uno de los siguientes valores

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

Para acceder a la memoria externa SD o micro SD, que generalmente se conecta desde el exterior del teléfono/tableta, debe usar una de las siguientes carpetas que crea Android para apuntar a la memoria externa:

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

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

"/mnt/sdcard/" 

ps: se puede notar una carpeta vacía o external_sdsd en la sdcard interna

memoria, esta carpeta está vacía y su utiliza para apuntar a la tarjeta micro SD externa.

al final asegúrese de tener acceso de lectura/escritura a la tarjeta sd android.permission.WRITE_EXTERNAL_STORAGE en el xml del manifiesto de Android.

finalmente se debe especificar el nombre del archivo y su listo

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); 
/////////// 

y su listo para ir ...

+1

Desafortunadamente, esto no es absolutamente estándar. En el LG Optimus está en/mnt/sdcard/_ExternalSD. Espero que alguien en Google revise todo eso. Nombrar los medios es tan malo (¿externo?) Y los documentos no dicen una palabra sobre cómo acceder a la segunda tarjeta sd cuando hay una incorporada. – Snicolas

+0

¿Puede ayudarnos a obtener el nombre de todas las Carpetas presente en la tarjeta SD? –

Cuestiones relacionadas