我是靠谱客的博主 火星上曲奇,最近开发中收集的这篇文章主要介绍C/JAVA /串口——中使用 prop(getprop,setprop),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在开发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 DeviceManagerServiceprivate 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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部