如果转载,请注明博主名字与文章出处:

杨光atany

http://blog.csdn.net/yang8456211/article/details/9051851


让我们先来看看SDK里面怎么写

Interface for accessing and modifying preference data returned bygetSharedPreferences(String, int). For any particular set of preferences, there is a single instance of this class that all clients share. Modifications to the preferences must go through anSharedPreferences.Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage. Objects that are returned from the variousget methods must be treated as immutable by the application.


意思是说:想要使用sharedpreferences可以通过一个getSharedPreferences(String,int)方法获得接口,修改preferences中的数据则需要使用到SharedPreferences.Editor对象,去保证数据提交的不变性和持久性。


看完介绍,首先说下本文内容。

1、SharedPreferences的使用

2、SharedPreferences创建与销毁

3、SharedPreferences的权限

4、跨进程访问SharedPreferences数据


一、SharedPreferences的使用

SharedPreferences myShare = getSharedPreferences("Test",MODE_WORLD_WRITEABLE + MODE_MULTI_PROCESS+ MODE_WORLD_READABLE);//所有权限SharedPreferences.Editor editor = myShare.edit();editor.putString("myvalue", "Hello Atany");editor.commit();


1、储存Preferences

getSharedPreferences()- 接受两个参数,第一个是文件名字,第二个是权限,用于设置不同程序对该文件操作

getPreferences() - 只有文件权限参数,与上一个不同在于只创建一个文件,默认使用当前类名作为文件的名字


1)可以看到,SharedPreferences 实例是通过getSharedPreferences()方法得到的,第一个参数的值为String类型,是SharedPreferences存储xml文件的名字,第二个值是该文件的权限,现在设为MODE_PRIVATE,为私有,关于权限看下文。

                                SharedPreferences myShare = getSharedPreferences("Test", MODE_PRIVATE);//私有权限

2)存储数据是通过创建一个editor实现。editor.putString()第一个参数是key,第二个是value,在xml文件中,数据是以键值对<key,value>的方式储存

SharedPreferences.Editor editor = myShare.edit();editor.putString("myvalue", "Hello Atany"); 

3)如果不提交的话,数据是不会保存的。

editor.commit();

2、读取Preferences

SharedPreferences share = getSharedPreferences("Test",MODE_PRIVATE);String str = share.getString("myvalue", null);
注:通过getString方法获得数据,第一个参数是key,第二个参数是DefValue 所谓的默认值(对于不同数据有getBoolean等等)


二、SharedPreferences创建与销毁


1、什么时候创建?


1)当读取的xml不存在的时候,和File不同,程序是不会报错的,取而代之是会返回一个defvalue(默认值),这个默认值在getString的第二个参数设置。

2)SharedPreferences创建的时机是editor.commit();在editor提交数据之后,在DDMS的data/data/包名/shared_prefs下会创建这个文件。


2、怎么销毁?

1)editor.clear();能够清空SharedPreferences里面的数据。


三、SharedPreferences的权限

SharedPreferences的权限分为四种


MODE_PRIVATE

MODE_WORLD_READABLE

MODE_WORLD_WRITEABLE

MODE_MULTI_PROCESS


注:在第一次创建SharedPreferences时写死权限,getSharedPreferences("Test", MODE_PRIVATE);当以后修改时,例如getSharedPreferences("Test",MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE+MODE_MULTI_PROCESS);也不会对其权限进行修改。


1、MODE_PRIVATE(0)

File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID)

默认模式,表示preference是私有的,只有当前appcation能够对其进行读写操作,当然,如果ShareUserID的话,与创建该应用的有相同UserID的应用也可以对其进行读写。


2、MODE_WORLD_READABLE(1)

File creation mode: allow all other applications to have read access to the created file.

此种模式产生的preferences对所有应用程序都是可读的,这个模式是不推荐的,如果需要不同数据之间的共享的话,建议用到ContentProvider。


3、MODE_WORLD_WRITEABLE(2)

File creation mode: allow all other applications to have write access to the created file.

此种模式产生的preferences能够被所有应用程序修改。同样不推荐使用,在4.0之后即使设置了此种模式,也不能被其他程序修改了。


4、MODE_MULTI_PROCESS(4)

主要用于多任务,2.3版本之前是默认的,2.3之后当多个进程共同访问的时候,必须指定这个标签。

注:括号中的数为权限对应的整形


四、跨进程访问SharedPreferences数据

访问其他程序的Sharedpreferences分为三步:

1、创建SharedPreferences对象

创建对象时要根据需求设置权限为,MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE

SharedPreferences myShare = getSharedPreferences("Test",MODE_WORLD_WRITEABLE + MODE_WORLD_READABLE);SharedPreferences.Editor editor = myShare.edit();editor.putString("myvalue", "Hello Atany");editor.commit();

注:如果没有设置权限,在其他程序读取时Log会显示could't rename file的异常。 在4.0之后即使设置了MODE_WORLD_WRITEABLE,也不能被其他程序修改了。如果需要修改可以尝试ContentProvider 或者BroadCast


2、创建需要访问对象的上下文,"com.example.testsharedpreferences"创建preferences包的包名

Context otherContext = createPackageContext("com.example.testsharedpreferences", CONTEXT_IGNORE_SECURITY);

3、读取SharePreferences中的信息

SharedPreferences myShare = otherContext.getSharedPreferences("Test", MODE_WORLD_READABLE);String str = myShare.getString("myValue", "");

更多相关文章

  1. android 一个应用去获取另一个应用assets下面的资源通过框架代码
  2. 学习深入理解android第一章
  3. Android应用程序键盘(Keyboard)消息处理机制分析(6)
  4. Android遍历所有文件夹和子目录搜索文件
  5. android系统服务大全
  6. Android(安卓)-- is 32-bit instead of 64-bit
  7. Android(安卓)卸载应用的两种方式
  8. Android使用Material Design自带CoordinatorLayout+AppBarLayout
  9. android 如何通过包名杀死指定的进程

随机推荐

  1. Android(安卓)Studio 导入项目和解决常见
  2. RMS认为Android没有尊重用户自由
  3. android 移动View的方法汇
  4. [Android] [ANR的原理、分析、实战] 【转
  5. Android(安卓)Jetpack之Navigation
  6. Android之网络请求1————HTTP协议
  7. 通信之进程间通信-AIDL
  8. android aidl 使用实例
  9. [置顶] Android拼图游戏开发全纪录1
  10. Android常用权限permission列表摘录