SharedPreferences跨应用跨进程获取数据(附件)
在做一个应用的时候,该应用本来是和桌面放在一起的,后来不得不分开,但是桌面部分需要获取该应用的数据,就是该应用切换数据,然后发送广播给桌面程序,桌面程序获取该应用的数据!
需要的数据不多,所以之前该应用融合在桌面的时候就是使用的SharePreferences保存,但是现在分开了,就要跨进程了,要么就用ContentProvider结合SQLite将数据暴漏给桌面程序(但是需要的数据很简单,所以觉得用这种方式太麻烦了),要么操作相同的一个文档(可能被其他程序更改,不安全),要么继续使用SharePreferences。
但是之前使用的SharePreferences都是使用模式Context.MODE_PRIVATE,这样就不能被其他程序访问到,开始一直以为这样的文档只能被本应用使用,后来查了很多资料发现使用不同的模式可以实现跨进程,跨应用获取该文件内容(写了个demo来测试一下,见附件):
程序ShareDataB相当于一个主程序,只用来获取客户端程序ShareDataA中SharePreferences的数据。
程序a点击按钮来切换数据:
SharedPreferences share = getSharedPreferences(SHARED_FILE_NAME, Context.MODE_WORLD_READABLE); boolean preBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值 // 更改share里的值 share.edit().putBoolean(SHARED_FILE_BOOLEAN_VALUE, !preBooleanValue).commit();// 改变值 boolean afterBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值 mValueText.setText(afterBooleanValue + "");
而程序b则在onresume的时候获取程序a中数据:
private static final String TARGET_PACKAGE_NAME = "com.example.sharedataa";// 目标数据程序的包名, /** * 根据目标程序的包名来获取其程序的上下文 * @return * @throws NameNotFoundException */ private Context getTargetContext() throws NameNotFoundException { return createPackageContext(TARGET_PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY); }
/** * Context.MODE_MULTI_PROCESS一定要添加,按理说只要Context.MODE_WORLD_READABLE 即可 * <p> * 但是,如果只有Context.MODE_WORLD_READABLE 的话,即使另一个程序改变了值,这个程序得到的值永远都是第一次获取的值 * <p> * 不会随着其他程序改变而改变 */ @Override protected void onResume() { super.onResume(); try { SharedPreferences share = getTargetContext().getSharedPreferences(SHARED_FILE_NAME, Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS); boolean afterBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值 mBooleanValueText.setText(afterBooleanValue + ""); } catch (NameNotFoundException e) { e.printStackTrace(); mBooleanValueText.setText("木有找到该包名"); } }
相关推荐
yanyongtao 2020-11-02
dangai00 2020-07-18
MrFuWen 2020-06-28
boredbird 2020-06-26
fengling 2020-06-16
MIKUScallion 2020-06-11
80447704 2020-06-09
XuDanT 2020-06-07
MrFuWen 2020-06-06
aNian 2020-06-03
dongxurr 2020-06-01
冒烟儿 2020-06-01
Roka 2020-05-25
zhangdy0 2020-05-25
ErixHao 2020-05-20
ErixHao 2020-05-16