簡體   English   中英

xamarin.android-如何獲得從共享上下文讀取和寫入sqlite數據庫文件的權限?

[英]xamarin.android - how to get access to read and write sqlite db file from shared context?

我在兩次應用之間共享我的.db sqlite文件。

我成功共享了此文件(因為第二個應用程序可以看到它),並且無法使用它。 我猜這是出於安全原因。

這是我分享的方式:

  1. 兩個應用程序的SharedUserId相同
  2. 只需創建數據庫

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;
};    
  1. 接收共享上下文。

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)

我試過的

  1. 變化PackageContextFlags.IgnoreSecurityPackageContextFlags.IncludeCode ..但后來sharedContext = null

  2. 將.db文件復制到第二個應用程序,然后連接到該應用程序,然后出現UnauthorizedAccessException

從其他線程像這樣 ,我可以看到,它可以使用數據庫文件從其他應用程序。

您有什么想法要解決這個問題嗎?

UPDATE

感謝Billy的回答,我發現我在AnfroidManifest.xml的<application>標記中AnfroidManifest.xml 正確的方法是在<manifest>標記中聲明它。

<manifest (...) android:sharedUserId="App.Id">

更改后,在安裝應用程序時出現INSTALL_FAILED_UID_CHANGED錯誤。 為了解決這個問題,我使用了:

adb shell rm -rf /data/data/appname.appname

我已經測試了您的代碼,它可以正常工作。 在設置sharedUserId之前是否創建了數據庫? 當我測試這種情況時,我遇到了這個問題。 如果是這樣,請卸載並重新安裝該應用程序可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM