c# - Xamarin LiteDB UnauthorisedAccessException

标签 c# android xamarin.forms android-6.0-marshmallow litedb

我正在尝试在 Xamarin Forms 应用程序中使用 LiteDB,但我似乎无法获得对文件进行写入或读取的权限。

从我的 MainViewModel.cs 调用

LiteRepository Error

我已将权限添加到 AndroidManifest.xml;

<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_PROFILE" />
<uses-permission android:name="android.permission.WRITE_GSERVICES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

我已经在 Android 6.0 中为我的应用程序添加了权限;

Android 6.0 Permissions

更新:我已经检查了路径访问,并且可以写出文件。

string documentsPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;

var dirPath = documentsPath + "/MyTestFolder";
var exists = Directory.Exists(dirPath);
var filepath = dirPath + "/test.txt";
if (!exists)
{
    Directory.CreateDirectory(dirPath);
    if (!System.IO.File.Exists(filepath))
    {
        var newfile = new Java.IO.File(dirPath, "test.txt");
        using (FileOutputStream outfile = new FileOutputStream(newfile))
        {
            string line = "The very first line!";
            outfile.Write(System.Text.Encoding.ASCII.GetBytes(line));
            outfile.Close();
        }
    }
}

但是,这段代码失败了;

string documentsPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
var dirPath = documentsPath + "/MyData/MyDB.db";
if (!Directory.Exists(dirPath))
{
    Directory.CreateDirectory(dirPath);
}

using (var db = new LiteDatabase(dirPath))
{
    // Get customer collection
    var collection = db.GetCollection<T>(typeof(T).Name);
    collection.Insert(tobj);
    return true;
}

最佳答案

您需要在 Android 中使用以下代码来访问存储/访问您的文件:

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var dirPath = Path.Combine(documentsPath, "MyDB.db");

关于c# - Xamarin LiteDB UnauthorisedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010253/

相关文章:

c# - 在 C# 中阅读 MS Exchange 电子邮件

c# - Windows 服务未在 C# 中写入其日志文件

c# - 理解给定的计算(cast + multiplication)

android - Phonegap-从www文件夹加载mp3

android - 使用 ResourceDictionary 动态更改选项卡栏颜色

c# - 如何从 mvc 应用程序向当前 IIS 站点添加新绑定(bind)

android - 如何在扩展 LifecycleActivity 的 View 中设置SupportActionBar

java - ListView项目背景颜色更新

xamarin.forms - 从 PCL 项目调用 xamarin.ios 中的方法

android - Xamarin(.Forms) 是否适合我的项目?