almacenamiento de datos de aplicaciones Android en la tarjeta SD


¿Hay alguna forma de almacenar los datos de la aplicación 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 desde la memoria interna a la tarjeta SD, pero ¿qué pasa si la memoria interna se llena en primer lugar? ¿Cómo lo manejan todos?

Author: Jeff Axelrod, 2009-07-31

6 answers

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

Respuesta antigua para que los comentarios sobre esto tengan sentido:

Añadiendo /sdcard/ a la raíz de su ruta 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 te permiten comprobar el tamaño de los archivos... así que debería ser posible (si tricky) para escribir algún código de conmutación por error. Este código ajustaría su ruta de raíz si la memoria interna se llenara.

 9
Author: haseman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-07 00:28:15

Es mejor utilizar Ambiente.getExternalStorageDirectory () que a hard code " / sdcard" No siempre es seguro que el nombre de la carpeta se llamará así. Además, la clase Environment ofrece un método getExternalStorageState () para comprobar si el almacenamiento externo está disponible.

 76
Author: yincrash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-17 20:40:22

Para comenzar:

Dependiendo del modelo / sistema operativo, puede acceder al directorio raíz de la tarjeta sd con:

File externalStorage = Environment.getExternalStorageDirectory();

Esto se referirá al almacenamiento sd interno o a la memoria sd interna.

externalStorage.getAbsolutePath() 

Devolverá uno de los siguientes valores

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

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

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

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

"/mnt/sdcard/"

Pd: puede notar una carpeta vacía external_sd o {[5] } en la tarjeta sd interna

Memoria, esta carpeta está vacía y se utiliza para apuntar a la tarjeta micro sd externa.

Al final, asegúrese de que tiene acceso de lectura/escritura a la tarjeta sd android.permission.WRITE_EXTERNAL_STORAGE en el xml del manifiesto de android.

Finalmente debe especificar el nombre del archivo y su lista

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 estás listo para ir ...

 33
Author: Rabih harb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-26 18:43:21

Aquí hay otro pequeño truco limpio. La aplicación 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 rutas diferentes, incluidas rutas en el directorio getExternalStorageDirectory .

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

 13
Author: phreed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-19 15:59:37

Algunos dispositivos usan /mnt/sdcard como punto raíz a la tarjeta SD.

 3
Author: Loris Albanese,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-16 17:07:49

El problema con el uso de la tarjeta SD es que no puede asumir de forma fiable que estará presente siempre cuando su aplicación lo necesite. Este no es el caso con la memoria interna. Mientras su aplicación no dependa de estos datos para ejecutarse, debería estar bien.

 2
Author: Prashast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-31 02:56:10