Android系统属性值设置和使用_property_value_max-程序员宅基地

技术标签: 属性  android  

转载:https://blog.csdn.net/qq_30624591/article/details/102679377


每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。

属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属性信息,可以从共享内存直接读取。这提高了读取性能。

API函数(Android7.1版本在system/core/libcutils/properties.c)是:

int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);


属性服务调用libc中的__system_property_init函数来初始化属性系统的共享内存。当启动属性服务时,将从以下文件中加载默认属性:

/default.prop
/system/build.prop
/system/default.prop
/data/local.prop

属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在/data/property中。

几种特殊的属性
1.ro.属性,它表示只读属性,它一旦被设置就不能被修改;
2.net.属性,顾名思义,就是与网络相关的属性,net.属性中有一个特殊的属性:net.change,它记录了每一次最新设置和更新的net.属性,也就是每次设置和更新net.属性时则会自动的更新net.change属性,net.change属性的value就是这个被设置或者更新的net属性的name。例如我们更新了属性net.bt.name的值,由于net有属性发生了变化,那么属性服务就会自动更新net.change,将其值设置为net.bt.name。
3.persist.属性,以文件的形式保存在/data/property路径下。persist.属性由于将其保存在了用户空间中,所以在property_init中是不能对其更新的,只能将其更新过程交给用户来处理。
4.ctl.属性,虽然是以属性的形式来进行设置,其实它的目的是为了启动或关闭它指定的service
属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中 。客户端应用程序可以轮询那个属性值,以确定结果。

如果想要开关机之后属性值变回空,尽量不要使用以上三种属性前缀命名你的属性值。或者可以在获取到你需要的属性之后,设置它成别的属性。

例子:

    #include <cutils/properties.h> //要包含头文件
    char driver_status[PROPERTY_VALUE_MAX];

    memset(_prop_value, 0, PROPERTY_VALUE_MAX);
    //get获得 "wlan.driver.status" 的属性,放到 driver_status 数组中。这是默认属性设置为NULL
    property_get("wlan.driver.status", driver_status, "0");
    
    static char wlan_value[7] ="timeout";
     property_set("wlan.driver.status", wlan_value);
    // 将 "wlan.driver.status" 属性设置为 timeout。

在Android中有三种方式来设置和获取属性:
1、Native(c++/c)代码
当编写Native的程序时,可以使用property_get和property_set API来获得和设置属性。使用这两个API必须要包含头文件cutils/properties.h和链接libcutil库。

在c使用demo:
1
    char buf[20]="qqqqqq";

    char tempbuf[PROPERTY_VALUE_MAX];

    property_set("type_value",buf);

    property_get("type_value",tempbuf,"0");

2、Java代码
Android在Java库中提供System.getProperty和System.setProperty方法,我们Java程序可以通过他们来设置和获得属性。

但是请注意!虽然从语法上面看Java的代码和Native代码非常相近,但是Java版本存储把属性存在其他地方,而不是我们上面提到的属性系统中。在JVM中有一个hash表来维护Java的属性。所以Java属性和Android属性是不同的,不能用Java API(System.getProperty和System.setProperty)来设置系统属性。也不能通过Native的方法(property_get和property_set)设置Java的属性。

更新:Andrew指出android.os.SystemProperties可以操作Android系统属性(虽然这个类倾向于内部使用)。这个类通过JNI调用Native的property_get和property_set方法来获得和设置属性。

在JAVA的使用demo:
1
    String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");

    SystemProperties.set("service.bootanim.exit", "0");


3、Shell脚本
Android提供了命令行工具setprop和getprop来设置和获取属性,他们可以在脚本中被使用。

 在shell的使用demo:
 adb相应的命令获取和设置属性wlan.driver.status:

  getprop "wlan.driver.status"
  setprop "wlan.driver.status"  "timeout"
————————————————
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42082222/article/details/105549700

智能推荐

python 爬虫常见的反爬策略与反爬攻克_python referrer policy-程序员宅基地

文章浏览阅读865次。python 爬虫常见的反爬策略与反爬攻克 爬虫基本对所有人来说,都是又爱又恨,爱恨交织的。由于网络的开放性,只要是连上了网线,那么就没有绝对的封闭,而爬虫基本可以说是无物不爬,总会有误爬的情况,或者爬取了相对来说不希望公开或者不希望他人知道的比较私密的信息,但另一方面,网络的参与者又希望有爬虫能爬取它,进而推广它自身,好像,蚂蚁与蜂蜜的关系,甜蜜而又危险?..._python referrer policy

forward和redirect的区别_redirect forward-程序员宅基地

文章浏览阅读1w次,点赞11次,收藏51次。forward和redirect的区别1.forward 和redirectforward又叫转发,表示转发,当请求来到时,可以将请求转发到其他的指定服务,用户端不知晓。redirect又叫重定向,表示转发,当请求发给A服务时,服务A返回重定向给客户端,客户端再去请求B服务。2.使用forward注意事项1.转发和被转发的请求类型必须一致,即全是GET或者POST2.转发者方法不能被标识位@RestController或者@ResponseBody3.使用redirect注意事项1.re_redirect forward

Vue基础知识总结 1:Vue入门-程序员宅基地

文章浏览阅读8.3w次,点赞167次,收藏1.1k次。Vue基础教程系列,打造精品专栏。_vue

前端之SEO搜索引擎优化_前端seo-程序员宅基地

文章浏览阅读1.8k次。SEO(Search Engine Optimization)是指通过优化网站的内容、结构和技术,提高网站在搜索引擎中的排名,从而增加网站的曝光度和流量。_前端seo

软链接和硬链接区别-程序员宅基地

文章浏览阅读8.4k次,点赞17次,收藏89次。一、软链接:又被叫为符号链接,它包含了到原文件的路径信息。创建软链接:ln -s file link二、硬链接:是对原文件起了一个别名。创建硬链接:ln file link1.本质:硬链接:本质是同一个文件软链接:本质不是同一个文件2.跨设备硬链接:不支持软链接:支持3.inode硬链接:相同软链接:不同4.链接数硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少软链接:创建或删除,链接数不会变化5.文件夹硬链接:不支持软链接_软链接和硬链接区别

用栈来实现括号匹配问题_js 栈 多层成对括号-程序员宅基地

文章浏览阅读1.8k次。在这里只做简单的一个括号匹配的问题其实思想都是一样的,若碰到左的,都入栈,右的,且原来的栈不为空,则拿出来进行匹配,成功了则继续往下做,否则,直接跳出循环。在这里为了省略起见,用了stl#include#include#include#includeusing namespace std;int main() { int i, j, k, n, m; char s[100_js 栈 多层成对括号

随便推点

Python:莫烦笔记1(循环、数据、判断)_python判断更好列表数据-程序员宅基地

文章浏览阅读210次。# 基本知识 ### 变量赋值 ##列表、字典、元组#### 打印Print ##_python判断更好列表数据

CTF常见的题型_ctf类型-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏21次。CTF常见题型CTF比赛通常包含的题目类型有七种,包括MISC、PPC、CRYPTO、PWN、REVERSE、WEB、STEGA。1.MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。2.PPC(Professionally Program Coder)类型,即编程类题目,题目涉及到编程算法,相比ACM较为容易。3.CRYPTO(Crypt_ctf类型

多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型_bp多元回归预测模型-程序员宅基地

文章浏览阅读458次。多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型_bp多元回归预测模型

"野马"中的桌面Java特性_access野马-程序员宅基地

文章浏览阅读1.4k次。Sun的桌面Java客户端组正在为下一版Java(代码名"野马")的某些重要特性和功能而工作;我们认为在此细说其中的某些亮点也许对您有所帮助。我们尽量给附加信息添加链接(如Bug ID或其它文章)并且在开发进程中告诉你每项特性添加到“野马”中的构建号的信息。并且随着野马的发布,这不仅只是说说而已,你可以随时从 http://mustang.dev.java.net下载到野马的最近版本。在此我们尽量_access野马

JDK基础脚本工具总结_基础工具总结-程序员宅基地

文章浏览阅读160次。本文摘自《深入理解Java虚拟机 第三版》,如此书的作者所说,虽然现在已经有个各种可视化工具实现了对命令行工具的封装,方便且体验良好。但是不论JDK发展到什么版本,或者工具如何封装,这些底层实现的基本思想都不会过时,都值得广大开发人员学习。1 基础工具:用于支持基本的程序创建和运行名称主要作用appletviewer在不适用web浏览器的情况下运行和调试Applet ,JDK11中被移除excheck检查jar冲突的工具,JDK9中被移除jar创建和管理jar文件_基础工具总结

【深度学习】ICPR 2022|3DUNet:卷积+胶囊强强联手,医学图像分割的新良方-程序员宅基地

文章浏览阅读3.1k次。作者丨ZiyangLi编辑丨极市平台导读卷积神经网络(CNN)目前在医学图像分割领域应用广泛。本文基于胶囊网络,设计了一种包含卷积与胶囊编码器的3DUNet架构并应用于医学图像分割,在减少推理时间的同时性能远优于以往UNet类架构。论文地址:https://arxiv.org/abs/2205.09299一、为什么要引入胶囊网络(Capsule Network)?..._icpr 2022 papers

推荐文章

热门文章

相关标签