我在 Android 应用程序上使用 SqlCipher 和 MvvmCross 时遇到了错误。
我目前面临的问题似乎是关于在我正在运行的模拟设备上本地创建数据库的权限。在花费大量时间搜索该主题后,我似乎无法找到解决方案。我将在下面列出我尝试过的事情,然后提供有关错误的更多详细信息:
- 在 Manifest.xml 文件上添加各种权限以允许 SqlCipher 写入设备。(经过一定程度的研究,您应该只在写入设备上的 SDCard 时才需要这样做)
- 查看访问公司 SqlCipher 帐户所需权限的任何可能性 - 这也不是问题,因为我们将必要的 dll 添加到项目中。
- 所有对必要文件 + 包的引用似乎都在那里,并且与当前上下文保持同步。
我已经缩小了项目中问题的起点。本质上,我正在编写一个 android 应用程序,并慢慢引入我们已经设置好的业务逻辑,以启动并运行它。我们的 iOS 应用程序使用我尝试用于 Android 的相同库和数据库结构,但在 iOS 端我没有收到此错误。
这是我得到的错误:
数据/用户/0/“公司文件位置”/files/Xamarin.Social.Accounts(权限被拒绝)
当 MvvmCross 尝试解析以下代码以在本地创建数据库时,会弹出此错误:
命名空间 HiddenForSecurity.Mobile.Data.Droid { 公共类 DatabaseContextService : IDatabaseContextService { 私有 SQLiteConnection _connection = null; 私有对象 _connectionLock = new object();
public object Connection
{
get
{
lock (_connectionLock)
{
return _connection;
}
}
}
public DatabaseContextService()
{
_connection = new SQLiteConnection(DatabasePath, DatabasePassword);
}
public void InitialiseDatabase()
{
_connection.CreateTable<MobileUser>();
_connection.CreateTable<UserRole>();
_connection.CreateTable<OfflineReport>();
_connection.CreateTable<OfflineDiary>();
}
public void Close()
{
_connection.Close();
_connection.Dispose();
}
public string DatabasePath
{
get
{
return Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "patientportal.db");
}
}
private string DatabasePassword
{
get
{
var context = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity.ApplicationContext;
Account accounts = AccountStore.Create(context)
.FindAccountsForService("PatientPortal")
.FirstOrDefault(x => x.Username == "systemUser");
if (accounts == null)
{
accounts = new Account("systemUser");
accounts.Properties["db"] = System.Guid.NewGuid().ToString();
AccountStore.Create(context).Save(accounts, "PatientPortal");
}
return accounts.Properties["db"];
}
}
}
}
有没有人知道为什么我会收到关于 Xamarin.Social.Account 的错误?
非常感谢 - 请询问任何必要的信息。
利亚姆