SharedPreferences多个程序之间共享数据

SharedPreferences多个程序之间共享数据
0

作者:703225158更新于 05月09日访问(1719评论(2

Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/包名/shared_prefs目录下:

1
2
3
4
5
SharedPreferences sharedPreferences = getSharedPreferences("config", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "NAME");
editor.putInt("age", 4);
editor.commit();//提交修改

因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。但是实际上即使用了MODE_WORLD_WRITEABLE权限,别的应用程序也是不能修改本程序的数据的
如果其他程序要修改本程序数据可以在配置文件中使用android:sharedUserId,加上shareduserid之后,写入其他程序的文件时,和权限没有关系
另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。
访问SharedPreferences中的数据代码如下:

1
2
3
4
SharedPreferences sharedPreferences = getSharedPreferences("config", Context.MODE_PRIVATE);
//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);

如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如:有个为cn.itcast.action的应用使用下面语句创建了preference。
getSharedPreferences("config", Context.MODE_WORLD_READABLE);
其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference,访问preference时会在应用所在包下的shared_prefs目录找到preference :

1
2
3
4
Context otherAppsContext = createPackageContext("cn.zql.action", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("config", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);

但是有一点值得注意,当使用这几种权限时,其他程序访问数据时启动本程序修改文件数据,其他程序得到的还是缓存数据得不到最新的数据,
其他程序要想得到最新数据,本程序在写文件时必须使用MODE_MULTI_PROCESS权限(参数是4)。
如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data//shared_prefs/config.xml”);//应替换成应用的包名.

转自:http://blog.sina.com.cn/s/blog_9e309d490101aoq0.html

补充:
SharedPreferences也可以设置监 听器来监听changed, added, or removed,这三种变化。
public abstract void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key)

Since: API Level 1
Called when a shared preference is changed, added, or removed. This may be called even if a preference is set to its existing value.

This callback will be run on your main thread.

Parameters
sharedPreferences The SharedPreferences that received the change.
key The key of the preference that was changed, added, or removed.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值