xamarin.android - 如何从共享上下文中读取和写入sqlite db文件?

时间:2018-03-21 13:25:28

标签: android visual-studio sqlite xamarin

我在两个aplications之间共享我的.db sqlite文件。

我成功共享了这个文件(因为第二个应用程序可以看到它)并且无法使用它。我想这是出于安全原因。

这就是我分享的方式:

  1. 两个应用的SharedUserId相同
  2. 只是创建数据库
  3. 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. 接收共享上下文。
    2. 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.IgnoreSecurity更改为PackageContextFlags.IncludeCode ..但随后sharedContext = null

      2. 将.db文件复制到第二个应用程序,然后连接到它,然后我得到UnauthorizedAccessException

      3. 从其他线程如this我可以看到可以使用其他应用程序的db文件。

        你知道我在这个问题上能做些什么吗?

        更新

        感谢Billy的回答,我发现我在<application>的{​​{1}}标记中声明了我的SharedUserId。 正确方式是在AnfroidManifest.xml tag ..

        中声明它

        <manifest>

        我更改后,在安装应用程序时遇到<manifest (...) android:sharedUserId="App.Id">错误。为了解决这个问题,我使用了:

        INSTALL_FAILED_UID_CHANGED

1 个答案:

答案 0 :(得分:1)

我测试了你的代码,它确实有效。在设置sharedUserId之前是否创建了数据库?当我测试这个场景时,我遇到了这个问题。如果是这样,卸载并重新安装应用程序可以解决此问题。