另外,在Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为了实现数据的共享,Android提供了Content Provider组件来实现应用程序之间数据的共享。但是SharedPreferences通过处理也可以实现数据共享。

1、Preference简介

Preference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。例如,我们设置了一个手机开机问候语,可以将其以Preference方式来进行配置。

使用Preference来存取数据,用到了SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。

调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:MODE_PRIVATE(私有)、MODE_WORLD_READABLE(可读)、MODE_WORLD_WRITEABLE(可写)。

SharedPreferences提供了获得数据的方法,如getString(String key,String defValue)、getInt(String key,int defValue)等。调用SharedPreferences的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value),putInt(String key,int value)等,调用该接口的commit()方法可以将数据进行保存。SharedPreferences和SharedPreferences.Editor的常用方法如下表:

2、SharedPreferences常用方法

方法名称

方法描述

edit()

返回SharedPreferences的内部接口SharedPreferences.Editor

contains(String key)

判断是否包含该键值

getAll()

返回所有配置信息Map

getBoolean(String key,boolean defValue)

获得一个Boolean值

getFolat(String key,float defValue)

获得一个float值

getInt(String key,int defValue)

获得一个int值

getLong(String key,long defValue)

获得一个long值

getString(String key,String defValue)

获得一个String值

SharedPreferences.Editor常用方法

方法名称

方法描述

clear()

清除所有值

commit()

保存

getAll()

返回所有配置信息Map

putBoolean(String key,boolean value)

保存一个Boolean值

putFloat(String key,float value)

保存一个float值

putInt(String key,int value)

保存一个int值

putLong(String key,long value)

保存一个long值

putString(String key,String value)

保存一个String值

remove(String key)

删除该键对应的值

3、

其他程序访问本程序的配置数据方式

通过SharedPreferences创建的配置文件,不需要指定路径和文件后缀名,读取的时候也是。通常情况下,配置只是提供给本应用程序使用的。在这里我们介绍一个小知识点,即其他程序想使用本应用程序的配置,那应该如何使用SharedPreferences呢?如下:

Context otherAppContext = createPackageContext("com.gary.appdisplaycontrol", Context.CONTEXT_IGNORE_SECURITY);

SharedPreferences sharedPreferences = otherAppContext.getSharedPreferences("preferences",Context.MODE_WORLD_READABLE|Context.MODE_MULTI_PROCESS);

备注:必须要添加

Context.MODE_MULTI_PROCESS属性,否则会遇到其他程序读取数据未更新问题

4、

配置数据的

内容以XML文件保存到了/data/data/$Packagename$/shared_prefs下面

可以通过adb查看:

adb shell

root@8312_kk:/data/data/com.gary.appdisplaycontrol/shared_prefs # cat app_no_display_apps_list.xml