Dado que está utilizando almacenamiento externo, su aplicación debe conocer el estado del almacenamiento externo, que puede obtener a través de Environment.getExternalStorageState()
.
Solo debe acceder al almacenamiento externo cuando el estado es MOUNTED
.
Si intenta abrir un archivo (o base de datos SQLite; ¡es solo un archivo!) durante el inicio del dispositivo, definitivamente tiene problemas porque el almacenamiento externo no está montado hasta bien avanzado el inicio del dispositivo (después de que se muestre la pantalla de inicio).
La forma de salir de esto es registrar un IntentFilter
ser notificado de todos los cambios en el estado de almacenamiento externo y comportarse en consecuencia.
¡Siempre es una buena idea leer la documentación! Consulte la documentación de Android para obtener más detalles:http://developer.android.com/reference/android/os/Environment.html
El uso de almacenamiento externo para este propósito es dudoso, porque no puede controlar cuándo deja de estar disponible. Por ejemplo, el usuario conecta su dispositivo al USB de su computadora y selecciona la opción "Habilitar almacenamiento masivo USB", para que pueda acceder al almacenamiento externo de su dispositivo desde su computadora. ¡Malas noticias! ¡Su aplicación se desconectará del almacenamiento externo y lo más probable es que no tenga la oportunidad de realizar ninguna limpieza de E/S!
Con este estado de cosas, ahora le queda Qué hacer con todos los datos que estaría poniendo en su base de datos, si estuvieran disponibles.