Almacenamiento de datos de aplicaciones de Android en la tarjeta SD

¿Hay una manera de almacenar datos de aplicación 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 lo que si la memoria interna se llena en el primer lugar? ¿Cómo maneja todo esto?

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

Vieja Respuesta para que los comentarios sobre esto tengan sentido:

Si /sdcard/ a la raíz de tu ruta, debes dirigir tu aplicación Android para que utilice la tarjeta SD (al menos funciona de esa manera con el G1). Los objetos del sistema de archivos de Android le dan la posibilidad de comprobar el tamaño de los archivos … por lo que debería ser posible (si es complicado) escribir algún código de error. Este código ajustaría su ruta de raíz si la memoria interna se llenara.

Es mejor usar Environment.getExternalStorageDirectory () que con el código "/ 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 comprobar si el almacenamiento externo está incluso disponible.

Empezar:

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

 File externalStorage = Environment.getExternalStorageDirectory(); 

Esto se referirá al almacenamiento interno SD o 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 suele enchufar desde el exterior del teléfono o la 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/" 

Ps: se puede notar una carpeta vacía external_sd o sd en el sdcard interno

Memoria, esta carpeta está vacía y su usado 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 manifiesto android xml.

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 tu listo para ir …

Aquí está otro pequeño truco aseado. La aplicación tiene una serie de métodos que están llamados a 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 reemplazar estos métodos para proporcionar rutas diferentes, incluidas las rutas de acceso en 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.

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

El problema con el uso de la tarjeta SD es que no se puede asumir con fiabilidad que estará presente siempre cuando su aplicación lo necesita. Este no es el caso con la memoria interna. Siempre y cuando su aplicación no se basan en estos datos para ejecutarlo debe estar bien.

  • Android: pre y post-HONEYCOMB montón de uso debido a los mapas de bits?
  • Android: ¿herramientas para encontrar fugas de memoria?
  • Tamaño de una aplicación Android de Hello World
  • ¿Es seguro pasar la instancia de una Actividad a otro objeto?
  • ¿Cómo gestiona la memoria Android?
  • ¿Hay de todos modos una aplicación puede utilizar más de 16mb en la memoria?
  • Android: fugas de memoria al crear dinámicamente UI con fondos de recursos de imagen
  • Android SparseArray con la clave de cadena?
  • Obtenga memoria de proceso libre en android
  • ¿Cómo analizar el comportamiento de Dalvik GC?
  • Cómo minimizar las ocurrencias GC_FOR_ALLOC?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.