room - 在2個Android應用程序之間共享SQLite數據庫?




db android (2)

我需要在2個應用程序之間共享一個數據庫。 我知道數據庫將在/ data / data / MY_PACKAGE / databases /上創建。 由於包名稱不同,我可以在任一應用程序上創建數據庫時定義一個包名的路徑嗎? 謝謝。

https://code.i-harness.com



您當然可以在2個應用程序之間共享一個數據庫。

為了在應用程序之間共享數據(前提是它們由同一發布者發布),您需要在兩個應用程序的AndroidManifest.xml中指定共享用戶ID。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >

(它沒有記錄,但共享用戶ID必須是一個至少有一個點分隔符的字符串)

其餘的很簡單,您不需要亂用數據庫路徑。 只需在兩個應用程序中使用相同的DBAdapter。 在託管數據庫的應用程序中,使用本機上下文調用DBAdapter。

DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();

在第二個應用程序中,使用數據庫託管應用程序的上下文訪問數據庫。
首先,定義共享上下文:

Context sharedContext = null;
    try {
        sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
        if (sharedContext == null) {
            return;
        }
    } catch (Exception e) {
        String error = e.getMessage(); 
        return;
        }   

然後使用共享上下文打開DBAdapter:

DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();

最後要注意的是,如果您的數據庫存在於清單中設置共享用戶ID之前,則需要在物理設備上卸載/重新安裝應用程序,以免您將自己鎖定在數據庫之外(sqlite錯誤14)。 另一方面,模擬器可能會更寬容。 最重要的是,如果您的應用程序在Android市場上發布,那麼在事後的想法中設置共享用戶ID將無效。

希望這可以幫助。







sharing