Есть ли способ открыть файл SQLiteDatabase с SD-карты с доступом OPEN_READWRITE? Это для внешних файлов базы данных, предоставленных пользователем, а не для внутренних данных приложения. (Edit: Обращение Ури, чтобы получить реальные пути к файлам, но жёстко на упрощенном примере)Открыть базу данных SQLiteDatabase на SD-карте с доступом OPEN_READWRITE в Android
Следующие работы, используя путь к внутренней памяти телефона, внешние к приложению:
SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/emulated/0/test.db",
null,
SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Используя путь на SD карту, однако бросает исключение:
SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/extSdCard/test.db",
null,
SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
исключение:
android.database.sqlite.SQLiteException: not an error (code 0): Could not open the database in read/write mode.
Но открытие с OPEN_READONLY работает отлично:
SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/extSdCard/test.db",
null,
SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Внешние разрешения хранения в манифесте:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
надеялся Storage Access Framework или Lollipop SD API может помочь, но я, не имея каких-либо удачи.
Есть ли способ открыть файл SQLiteDatabase с возможностью записи с SD-карты?
Используйте 'Environment.getExternalStorageDirectory()' для доступа к хранилищу, а не по фиксированному пути. Точка монтирования SDcard может отличаться от устройства к устройству. –
Я обрабатываю файлы Uri отдельно для файлов. Просто упрощено в вопросе, чтобы изолировать проблему. –
Может ли это быть источником вашей проблемы: http://technofaq.org/posts/2014/04/fixing-external-sd-card-write-issue-on-android-kitkat/ – Raanan