Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理
          Android給每個APK進程分配一個單獨的用戶空間,其manifest中的userid就是對應一個Linux用戶
          (Android 系統是基于Linux)的.
          所以不同APK(用戶)間互相訪問數據默認是禁止的.
          但是它也提供了2種APK間共享數據的形式:
          1. Share Preference. / Content Provider
          APK可以指定接口和數據給任何其他APK讀取. 需要自己實現接口和Share的數據.
          本文對于這個不做詳細解釋

          2. Shared User id
          通過Shared User id,擁有同一個User id的多個APK可以配置成運行在同一個進程中.所以默認就是
          可以互相訪問任意數據. 也可以配置成運行成不同的進程, 同時可以訪問其他APK的數據目錄下的
          數據庫和文件.就像訪問本程序的數據一樣.
          比如某個公司開發了多個Android 程序, 那么可以把數據,圖片等資源集中放到APK  A中去. 然后
          這個公司的所有APK都使用同一個User ID, 那么所有的資源都可以從APK A中讀取.

          舉個例子:
          APK A 和APK B 都是C公司的產品,那么如果用戶從APK A中登陸成功.那么打開APK B的時候就不用
          再次登陸. 具體實現就是 A和B設置成同一個User ID:
              * 在2個APK的AndroidManifest.xml 配置User ID:
              <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.android.demo.a1"
              android:sharedUserId="com.c">
             這個"com.c" 就是user id, 然后packagename APK A就是上面的內容,  APK B可能
             是"com.android.demo.b1" 這個沒有限制

          這個設定好之后, APK B就可以像打開本地數據庫那樣 打開APK A中的數據庫了.
          APK A把登陸信息存放在A的數據目錄下面. APK B每次啟動的時候讀取APK A下面的數據庫
          判斷是否已經登陸:
          APK B中的代碼:
                      friendContext = this.createPackageContext(
                              "com.android.demo.a1",
                              Context.CONTEXT_IGNORE_SECURITY);
          通過A的package name 就可以得到A的 packagecontext
          通過這個context就可以直接打開數據庫.

          轉自http://bingoit.javaeye.com/blog/457891
          posted on 2010-01-31 19:39 calvin 閱讀(634) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 临澧县| 调兵山市| 无为县| 灵山县| 仙桃市| 凤城市| 黔西| 中江县| 福州市| 新余市| 新龙县| 楚雄市| 哈密市| 循化| 无为县| 蒲城县| 库尔勒市| 历史| 靖远县| 墨玉县| 余庆县| 新平| 博兴县| 江口县| 华容县| 定陶县| 仁寿县| 开原市| 喀喇沁旗| 和田市| 大田县| 刚察县| 莱芜市| 武川县| 冷水江市| 南投县| 广德县| 潮州市| 工布江达县| 台中市| 怀安县|