Android中编辑其他应用的SharedPreferences(一)

来源:互联网 发布:java线程间传递数据 编辑:程序博客网 时间:2024/05/23 22:20

背景:在源生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。这个不信可以尝试一下。

   主要讨论一下第二个问题的解决方案。

0 0