介绍
一、使用
这中方法在framework里面经常见到。
特别属性:
如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。重启以后这个属性就没有了。
如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。重启以后这个属性还有。
其它属性名称,如“sys.”开头,存储在内存中,重启以后就没有了。
在c++中就是对应JAVA的两个函数就是property_set, property_get,其实JAVA是通过JNI调用这两个函数的。
源码路径frameworks/base/core/java/android/os/
get方法有很多,如get(String key),get(String key, String def),getInt(String key, int def),getBoolean(String key, boolean def),而set方法只有set(String key, String val)
JAVA
import ;
("", ());
String lang= ("");
C++
#include <cutils/>
int len, status;
char buf[PROPERTY_VALUE_MAX];
status = property_set("".c_str(), "zh".c_str());
len = property_get("".c_str(), buf, "en");
具体可参照源码/frameworks/base/core/jni/android_os_SystemProperties.cpp的写法
在adb shell可以通过以下的命名读取和修改
#getprop
#setprop zh
二、使用
这种方式会保存变量到Settings 数据库中,飞行模式、按键音等的开关就是用这种方式实现的。
在中包含权限:
<uses-permission android:name=”.WRITE_SETTINGS” />
在需要发送数据的java文件中,包含:
import ;
import ;
ContentResolver resolver = (); //mContext为所在应用的上下文
(resolver,”inputFlag”,1);
inputFlag的取值可以为/reference/android/provider/ 中Constants一栏
同理,在接收数据端:
(resolver,”inputFlag”,3); //没有取到值时把3返回
//具体可以查看上面链接的Public methods一栏
添加系统属性
一、
这种系统属性我们经常用到,例如飞行模式的开启和关闭,我们就是去改变.AIRPLANE_MODE_ON 的值。
下面就介绍下我们怎样去定义一个系统属性。例如要添加一个属性名为“BOX_XH”
路径:frameworks/base/core/Java/android/provider/
public static final String BOX_XH = "box_xh";
public static final String[] SETTINGS_TO_BACKUP ={
~
+BOX_XH
~
}
这样添加后,你就是可以通过(getContentResolver(), .BOX_XH,0) 和(getContentResolver(), .BOX_XH,0)去得到和设定BOX_XH的属性值。
二、SystemProperties
创建与修改android属性用(name, value),获取android属性用(name),需要注意的是android属性的名称是有一定的格式要求的,如下: 前缀必须用system\core\init\property_service.c中定义的前缀 ,进行系统属性设置的程序也必须有system或root权限
如果我们要添加一个property:例如:xiaohei
路径:system/core/rootdir/
在on post-fs-data 目录下
setprop 1// 前缀名; 1为初始值
PS:不同前缀名权限不同,这里就不一一说明;还有为什么要加载on post-fs-data目录下,这和的语法有关。