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

  • Android SQLiteOpenHelper - clase diferente para cada tabla?
  • Consultar tabla con subclases-como las relaciones
  • ¿Cómo eliminar todos los registros de la tabla en sqlite con Android?
  • GetLoaderManager (). InitLoader () no acepta 'this' como argumento aunque la clase (ListFragment) implementa LoaderManager.LoaderCallbacks <Cursor>
  • Sincronizar / actualizar bases de datos sqlite
  • Uso de la base de datos existente en Android Wear
  • nativescript-sqlite y módulo angular2 no se encuentra excepción
  • Random () en sqlite y Android sdk
  • Conexiones y bloqueo de SQLite
  • SQLiteDatabase getWritableDatabase () no funciona
  • Consulta SQLite: Seleccione la consulta con la cláusula BETWEEN
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.