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



app share (4)

數據庫路徑對於每個應用程序都是私有的,據我所知,它不可能直接跨應用程序訪問它。

然而,一種方法是一個應用程序使用ContentProvider使另一個應用程序可以訪問其數據庫。 看看這是否適合你。

內容提供商存儲和檢索數據並使其可供所有應用程序訪問。 它們是跨應用程序共享數據的唯一方式; 所有Android軟件包都無法訪問的公共存儲區域。

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



您當然可以在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將無效。

希望這可以幫助。


在將cache_size提升到更高的值(即PRAGMA cache_size=10000;之前,我不能從事務中獲得任何收益PRAGMA cache_size=10000;





android database sqlite sharing