我在两个aplications之间共享我的.db sqlite文件。
我成功共享了这个文件(因为第二个应用程序可以看到它)并且无法使用它。我想这是出于安全原因。
这就是我分享的方式:
var Folder =
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
using (var conn = new SQLiteConnection(System.IO.Path.Combine(Folder, "Paczki.db")))
{
conn.CreateTable<Odczyt>();
return true;
};
Context sharedContext = null;
try
{
sharedContext =
this.CreatePackageContext(
"MobilnePaczki.MobilnePaczki", PackageContextFlags.IgnoreSecurity);
}
catch (Exception e)
{
}
using (var conn =
new SQLiteConnection(sharedContext.DataDir.ToString() + "/files/Paczki.db")) //I am sure that file exists
//... Could not open database file: ... files/Paczki.db (CannotOpen)
我尝试了什么:
将PackageContextFlags.IgnoreSecurity
更改为PackageContextFlags.IncludeCode
..但随后sharedContext = null
将.db文件复制到第二个应用程序,然后连接到它,然后我得到UnauthorizedAccessException
从其他线程如this我可以看到可以使用其他应用程序的db文件。
你知道我在这个问题上能做些什么吗?
更新
感谢Billy的回答,我发现我在<application>
的{{1}}标记中声明了我的SharedUserId。
正确方式是在AnfroidManifest.xml
tag ..
<manifest>
我更改后,在安装应用程序时遇到<manifest (...) android:sharedUserId="App.Id">
错误。为了解决这个问题,我使用了:
INSTALL_FAILED_UID_CHANGED
答案 0 :(得分:1)
我测试了你的代码,它确实有效。在设置sharedUserId之前是否创建了数据库?当我测试这个场景时,我遇到了这个问题。如果是这样,卸载并重新安装应用程序可以解决此问题。