«Xamarin Forms Sqlite для Android 7+» - поддержка - PullRequest
0 голосов
/ 16 октября 2018

Для некоторых я использовал плагин sqlite-net-pcl, но в магазине игр теперь требуется приложение для Android версии 7 как минимум.

Когда я нацеливаюсь на это (Target Android Versions - 7.1), приложение не может открыть / создать базу данных, оно работает только для более низкой версии Android, такой как 5. Я знаю, что произошли изменения безопасности, которыевозможно, это вызвало, но я не знаю, как решить эту проблему.

Я получаю путь к данным для Android, например, Path.Combine(global::Android.OS.Environment.ExternalStorageDirectory.Path, filename);

Затем при запуске мое приложение пытается открыть соединение с базой данных, какпоэтому

string dbPath = DependencyService.Get<IFileHelper>().GetLocalFilePath("myDbName.db3"); var conn = new SQLiteAsyncConnection(dbPath);

Я хочу использовать SQLiteAsyncConnection, поскольку он обрабатывает блокировки таблицы.

Исключение составляет:

Необработанное исключение: SQLite.SQLiteException: Could not open database file: /storage/emulated/0/myDbName.db3 (CannotOpen)

Я также удостоверился, что отмечен галочкой для чтения и записи для разрешения внешнего хранилища.Используемый мной плагин - https://github.com/praeclarum/sqlite-net, что рекомендуют формы xamarin в своей документации.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я думаю, что файл базы данных sqlite - это не то, что пользователь должен видеть и иметь к нему доступ.Так что не храните его в локальной папке.

Как я уже говорил в аналогичном сообщении reddit .. Вы можете пропустить всю драму разрешений, если храните БД в личной папке.приложения.Тогда вам не нужно спрашивать разрешения.Проверьте эту официальную статью , которая объясняет права доступа для разных версий Android и особенно график в конце.

0 голосов
/ 16 октября 2018

Я думаю, что вы пытаетесь сохранить файл базы данных во внешнем хранилище.Вам нужно будет предоставить приложениям разрешения на запись во внешнее хранилище (AppManifest -> Чтение / запись во внешнее хранилище).Как только вы это сделаете, вы можете включить разрешения в настройках устройства (Приложения -> [имя приложения] -> Разрешения) для целей тестирования, или вы можете использовать Плагин разрешений от James Montemagno , чтобы включитьЧтение / запись в хранилище.Разрешения должны быть предоставлены до доступа к файлу базы данных.

Я тоже использую тот же плагин.Я настроил инициализацию базы данных ( после запроса разрешений хранилища ) следующим образом:

/* Request storage permissions first!! */

// After granting storage permissions...
string dbPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
string databaseFileName = "MyDatabase.db";
string fullDatabasePath = System.IO.Path.Combine(dbPath, databaseFileName);
_connection = new SQLiteConnection(fullDatabasePath);

Я не пробовал использовать SQLiteAsyncConnection, но это не должно иметь большого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...