Android abrir o crear base de datos

Estoy tratando de crear una base de datos en mi tarjeta sd. Siempre que llamo a SQLiteDatabase.openOrCreateDatabase consigo el error:

07-21 13: 33: 17.587: ERROR / AndroidRuntime (5541): Causado por: android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos

¿Alguien sabe lo que puede estar causando esto? Aquí está el código que tengo en el método open () de mi clase de base de datos:

File sdcard = Environment.getExternalStorageDirectory(); String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + Schema.DATABASE_NAME ; db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 

Una posible falla en esto podría ser que no estableció los permisos apropiados

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Sin embargo, el almacenamiento de datos en una tarjeta SD se considera inseguro. Porque cada aplicación que tiene permisos para almacenar datos en el almacenamiento sd podría acceder a la base de datos.

Editar: Otro posible problema es que el almacenamiento externo puede no estar disponible. Debe asegurarse de que su almacenamiento externo está actualmente grabable. Un método sería determinar el estado a través de getExternalStorageState (ver referencia aquí ).

 getExternalStorageState() returns MEDIA_SHARED if the media is present not mounted, and shared via USB mass storage. 

Referencia . También hay un post de stackoverflow al comprobar el estado aquí: Error de escritura de archivo de texto en la tarjeta SD

  • ORMLite Seleccionar campos distintos
  • Android - Base de datos SQLite en tarjeta SD
  • Error al leer la fila 0, columna 0 de una CursorWindow que tiene 0 filas, 64 columnas
  • Android Master-Detalle de ejemplo de base de datos
  • Android desventajas de no cerrar el cursor
  • Se eliminó la base de datos de Sqlite cuando borro datos de la aplicación
  • Base de datos no visible en la carpeta DDMS cuando se utiliza el dispositivo real en lugar del emulador
  • Cómo obtener la fecha MAX en SQLite
  • ¿Está bien tener una instancia de SQLiteOpenHelper compartida por todas las actividades en una aplicación de Android?
  • Error al descifrar en java
  • Eliminar todas las filas de tabla de la tabla de base de datos SQLite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.