概述
在开发Framework 中,prop属性的设定是很常用的一种方式,作为和java中的 SharedPreference 算是有点相似把,但是有肯定是不一样的。这个用来在编译Android系统的时候 版本控制用的多一点把,具体的作用可以自行百度,本文章只讲使用:
C/C++:
①getprop 使用的比较频繁:
该代码是实例,写在system/vold/NetlinkHandler.cpp 下
在onEvent内
/***Add usb2 disable temporary scheme 20191231***/
char args[PROPERTY_VALUE_MAX];
property_get("vendor.device.usb2",args,"false");
if (strcmp(args,"true")==0){
const char *path = evt->findParam("DEVPATH");
if (strstr(path,USB_2_PATH)!=NULL){
SLOGW("DISABLE USB2");
return;
}
}
// 以下是将USB挂载的消息下发
if (!strcmp(subsys, "block")) {
vm->handleBlockEvent(evt);
}
②setprop的话,因为是系统内,所以要先在系统.mk中定义:
path:/device/fsl/imx8q/
#Carplay && AndroidAuto Connected Success , unmount usb2.
PRODUCT_PROPERTY_OVERRIDES +=
vendor.device.usb2 = false
注意:以ro.开头的属性都是只读属性,以persist开头的属性,一般都是从/data/property目录中加载的,设置setprop 中"ro.product.device.carbit",ro的是不可以二次被setprop的也就是设置之后不可再被修改。 谨慎使用,一般非系统级别的,APP用的建议使用
所以建议自己添加的用避开ro,如果是自己代码中的一些小的属性,只是自己使用的话,我一般用vendor
JAVA:
import android.os.SystemProperties;
SystemProperties.set("xxxxx","xx")
SystemProperties.get("xxxxx","xx")
其实这些就够了,不过看着有点简单,我把我的实例贴出来。
public class DeviceManagerService {
private final String UNMOUNT_DEVICE_PROP_STATE = "vendor.device.usb2";
private final String GET_EASYCON_PROPERTY= "vendor.product.device.easycon";
/**setprop**/
case UNMOUNT_DEVICE_PROP_STATE:
SystemProperties.set(UNMOUNT_DEVICE_PROP_STATE,"true");
break;
/**getprop**/
if("false".equals(SystemProperties.get(GET_EASYCON_PROPERTY))){
Log.d(TAG, "Carplay is connected");
}
}
串口命令:
仅用于临时修改,手动操作测试一些属性:
在串口中输入:getprop 你就可以看到很多 已经定义好的prop
getprop “key”
setprop "key" "value"
如果需要修改:
/**获取当前prop 属性**/
mek_8q:/ # getprop vendor.device.usb2
false
/**设置prop 属性,系统重启之后便恢复默认**/
mek_8q:/ # setprop vendor.device.usb2 true
mek_8q:/ # getprop vendor.device.usb2
true
补充:在RC 中设置 setprop
on boot
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
注意: 只需要判断是否存在这个prop,建议用字节判断
如果是单纯的是来判断是否又prop这个属性的话,则:
if(property_get(?,?,?)>0)
就满足了 这个需求。因为property_get 获得到的是[字节数],
比如 setprop vts.hidl.get_stub 1 ,则代码中property_get =1
比如 setprop vts.hidl.get_stub on ,则代码中property_get =2
比如 setprop vts.hidl.get_stub true ,则代码中property_get =4
如果需要值,就是args 的值了,可以直接打印
CM_LOGP(CM_LOG_INFO, "vendor.product.device.carbit=%s",args);
//例子:
做if判断的话,如下
char args [PROPERTY_VALUE_MAX];
if (property_get("vendor.device.usb2", args, "") > 0) {
//xxxxx
}
//或者
int prop;
prop = property_get("vendor.device.usb2", args, "");
if(strcmp(args, "true")==0){
}
另外 设置setprop 不仅限于 String 类型。只要你想要什么就可以写什么,
int,string,都可以。只需要正确的匹配就好。
最后
以上就是火星上曲奇为你收集整理的C/JAVA /串口——中使用 prop(getprop,setprop)的全部内容,希望文章能够帮你解决C/JAVA /串口——中使用 prop(getprop,setprop)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复