Android中編輯其他應用的SharedPreferences(一)

背景:在源生Settings中,增加一個頁面,可以配置其他應用的設置


思路:1.讀取其他應用的xml

            2.在Settings中修改配置信息

           3.更新其他應用的xml


 加載資源:在PreferenceFragment中使用addPreferenceFromIntent(Intent intent)方法。這個方法可以獲得其他APK中的Preference的佈局資源。參數Intent可以使有Action的隱式啓動,也可以是指明包名類名的顯示啓動。效果類似常用的addPreferenceFromResource。

   但是在使用過程中有兩個問題:1.無法打開所有繼承了DialogPreference的控件。

  2.保存的值是針對當前的APK的,即無法實現修改其他APK的保存內容。


   第一個問題的原因是所有彈出的Dialog的Context屬性都不是基於當前的Activity的,這個Context是在addPreferenceFromIntent(Intent intent)這個方法中根據包名生成的。解決的辦法是獲取這個Preference控件的所有屬性,在代碼中創建新的相同的控件,賦值、替換。

   第二個問題,沒什麼原因,Android就是這樣的。最開始的解決方法就是主動去修改對應APK的SharedPreferences。參考許多書、及網絡資料,發現大多說可以修改其他APk的SharedPreferences,只要這個SharedPreferences權限足夠就可以。實踐過發現這幫鳥人都是網上互相抄抄,也沒怎麼研究。SharedPreferences只能跨進程讀,並不能修改。因爲程序默認修改的權限是在本應用下,沒有權限修改其他APK目錄下產生的文件。即便把權限設置成Context.MODE_WORLD_WRITEABLE。這個不信可以嘗試一下。

   主要討論一下第二個問題的解決方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章