2015-02-04 23 views
5

我有幾個應用程序構建在同一個引擎上。該引擎正在將數據存儲在SQLite中。所有應用程序的數據庫結構都是相同的。我需要爲所有這些應用程序組織一個通用存儲。如何將少數應用程序的數據存儲在一個地方?

例如,有一個應用程序A和B.第一個用戶安裝了應用程序A並添加了數據,然後安裝了應用程序B,這對於同步這兩個應用程序的數據庫是必需的。使用的功能內容提供商將不起作用,因爲在這種情況下,如果沒有應用程序A,應用程序B將無法工作。而且我們也不知道哪個應用程序用戶首先安裝。

有一個想法是同步所有應用程序的數據庫,每個應用程序將保留自己的數據庫,但我會有一個數據庫的副本。意味着儘可能多的應用程序安裝儘可能多的數據庫副本。

也許有一種簡潔的方式來實現這個想法?

+0

你能解釋一下你想要完成的事嗎?我想知道爲什麼用戶要安裝多個類似的應用程序。他們這樣做會很普遍嗎? – bryan

+0

所以,我的第一個APP是https://play.google.com/store/apps/details?id=com.aosc 我的第二個應用程序是 https://play.google.com/store/apps/details? id = com.numbersforsms 這兩個應用程序都與歷史聊天。 因此,我需要在展臺應用程序上安裝相同設備時具有相同的對話歷史記錄。 – SorryForMyEnglish

+0

請參閱:http://stackoverflow.com/questions/7053809/share-sqlite-database-between-2-android-apps – John

回答

1

您可以將數據庫存儲在外部存儲器中並從所有應用程序訪問它(使用getExternalStorageDirectory)。

使用openOrCreateDatabase method of the SQLiteDatabase類來訪問它並從中讀取/寫入數據。

由於從多個進程訪問可能導致鎖定,因此我建議您使用具有鎖定應用程序的名稱/軟件包名稱的文件來管理自己,以便可以在應用程序之間同步數據訪問。

4

爲什麼不嘗試在所有應用中使用"sharedUserId"。有了這個,你也可以訪問其他應用程序的數據。

假設你已經知道你所有的其他應用程序,在每次應用程序第一次加載時,你將開始搜索創建數據庫的公用文件夾。這個文件夾可以在你的SD卡中。如果你在那裏找到DB文件,那麼你可以打開它並使用它。否則,你創建一個。然後在所有應用程序中使用同一個數據庫

我不確定從各種應用程序打開/寫入同一個數據庫有什麼影響。也許你需要找出寫入過程中鎖定機制的方法(也許在寫入數據庫時​​創建一個.lock文件?)

2

我遇到過同樣的設計問題(使用相同引擎的多個應用程序包含持久的SQLite數據庫表,服務和大量的邏輯)。

我做自己的研究,我怕結論是這樣做的唯一途徑是:做,在谷歌的方式

Google Play Services是一個過程,谷歌由恰好解決了這個問題爲他們自己的場景 - 應該始終可用於所有應用程序(包括他們自己的)的引擎。這意味着它是一個獨立的應用程序,它將服務和內容提供商公開給所有應用程序。

Google通過Google Play商店應用無縫地將Google Play服務安裝在後臺。這是一個特權,沒有其他應用程序可以擁有,因爲它們同時控制應用程序和操作系統Android本身(不公平!)

因此,如果您可以強制用戶下載專用應用程序僅用於您的引擎(如Google ) - 那很棒!

如果不是,那麼您必須先安裝一個必須安裝的主/主應用程序,並且它是唯一一個將數據和服務公開給所有其他人的應用程序。

+0

您正在談論Google Play服務。是的,這是一個正確的想法,但這是一個問題 - 只有谷歌被允許強制人們安裝額外的應用程序。如果我將這樣做,90%的用戶將拒絕安裝額外的應用程序。 PS。亞馬遜沒有在其設備上安裝谷歌播放服務,並且不允許發佈沒有它的應用程序。 – SorryForMyEnglish

+0

是的。但是,您仍然可以告訴用戶,爲了使用您的某個應用程序 - 他們必須重定向到您的引擎的下載頁面。當然,很多用戶會拒絕,但這仍然是一個選擇。 –

相關問題