添加系统属性:和SystemProperties

时间:2025-01-27 14:19:25

介绍

一、使用

这中方法在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目录下,这和的语法有关。