2010年9月3日 星期五

多個android application 分享數據 - Share User ID

參考:http://www.cnmsdn.com/html/201008/1282360309ID7398.html
在android中每一個應用程式都是運行在自己的獨立的空間裡,應用程式之間需要共用資料
1.    可以採取 SharedPreferences, ContentProvider, Service等方式。
2.    通過Shared User id。擁有同一個User id的多個APK可以配置成運行在同一個進程中。所以預設就是可以互相存取任意資料,但也可以配置成運行成不同的進程,同樣可以訪問其他APK的資料目錄下的資料庫和檔案,就像訪問同一程式的資料一樣。比如某個公司開發了多個Android 程式,那麼可以把資料、圖片等資源集中放到APK  A中去. 然後這個公司的所有APK都使用同一個User ID, 那麼所有的資源都可以從APK A中讀取。
公司中不同的APK需要共用資源怎麼辦呢?下面通過代碼進行解析:
設定第一個應用程式為shareuserid_a,其中的AndroidManifest.xml檔代碼如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com.example.id"
>
.......
第二個應用程式為shareuserid_b,其中的AndroidManifest.xml檔代碼如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.b"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com. example.id"
>
.....
兩個應用程式共用一個userid,在b中需要訪問a代碼如下:
Context ct=this.createPackageContext("com.example.a", Context.CONTEXT_IGNORE_SECURITY);
這樣獲取到a的context,那麼即可透過a的context 獲取其中相關的資源。

如何設定APK是執行在同一個行程中?
Ans: To make them actually run in the same process, you need to use android:process with the same process name

沒有留言: