Xamarin Forms, sqlite-net-pcl, расположение файла базы данных Android - PullRequest
0 голосов
/ 06 декабря 2018

Я использую SQLite (через пакет nuget "sqlite-net-pcl") в приложении Xamarin Forms, работающем на различных версиях Android.

Мне нужно сделать файл базы данных доступным для загрузки вПК (даже если только в режиме отладки) для диагностических целей, но, кажется, в какую бы папку Android я не поместил ее, я не смогу найти ее потом.

Я (по умолчанию) помещаю файл в ...

System.IO.Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "database.db")

Обратите внимание, что в приведенном выше примере я использую библиотеки Mono, а не библиотеки Android, чтобы найти папку.

Я пробовал большинство опций «Environment.SpecialFolder», что яХотелось бы в идеале это способ определения пути к папке «Загрузки», который доступен при просмотре на устройстве с ПК через USB (This PC \ MyDevice \ Internal shared storage \ Download), но я просто не могу найти способ определитьгде эта папка находится на разных устройствах и версиях Android.

Может кто-нибудь, пожалуйста, скажите мне, как получить путь к этому "Downloads "или даже как добраться до родителя этой папки, чтобы я мог создать свою собственную подпапку?Я подозреваю, что мне нужно будет использовать Android.OS.Environment.DirectoryDownloads или подобное, но я просто не могу понять, как это правильно.

Спасибо.

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете сделать это изначально на Android примерно так:

File sd = Environment.GetExternalStoragePublicDirectory(Environment.ExternalStorageDirectory.Path);
if(sd.CanWrite())
{
       string currentDBPath = sqlConnectionObj.DatabasePath;
       string backupDBPath = "backupname.db";
       File currentDB = new File(currentDBPath);
       File backupDB = new File(sd, backupDBPath);
       if(currentDB.Exists())
        {
           FileChannel src = new FileInputStream(currentDB).Channel;
           FileChannel dst = new FileOutputStream(backupDB).Channel;
           dst.TransferFrom(src, 0, src.Size());
           src.Close();
           dst.Close();          
        }
}          

Это должно создать файл базы данных в корневом пути вашей SD-карты

Ах да, не забудьте установитьразрешение на запись на SD-карту в вашем манифесте, как показано ниже.

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

Также вам может потребоваться изменить разрешения проверки времени выполнения, если они еще не доступны.

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