Android framework开发全局系统属性设置与获取
Java中设置和获取SystemProperty属性:
SystemProperties.getInt("persist.sys.boot_music_control", 0) SystemProperties.set("persist.sys.boot_music_control", ""+value);
C++中获取Java层中设置的属性值:
char boot_music_control[PROPERTY_VALUE_MAX]; if (property_get("persist.sys.boot_music_control", boot_music_control, 0) != 0) { mediastatus = mediaplayer->setDataSource(pBackupSoundFileName, NULL); }
1 命令行(shell) properties设置和获取接口
2 c/c++语言 properties设置和获取接口
3 Java语言 properties设置和获取的接口
Android提供了一套系统参数设置和获取的方法,这些参数可以在android系统中静态或动态的设定和获取,使用SystemProperty类(该类只有在framework或系统级应用中使用),代码中大量存在:SystemProperties.set()/SystemProperties.get();通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属性,肯定对整个系统全局共享。通常程序的执行以进程为单位各自相互独立,如何实现全局共享呢?
System Properties(SystemProperty详细介绍及原理)是怎么一回事,又是如何实现的呢?
属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。
每个属性是一个键值对(key/value pair),其类型都是字符串。
这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性……
命令行(shell) properties设置和获取接口
getprop “key”
setprop "key" "value"
c/c++语言 properties设置和获取接口
代码定义在:
system/core/libcutils/properties.c #define PROPERTY_KEY_MAX 32 #define PROPERTY_VALUE_MAX 92 int property_get(const char *key, char*value, const char *default_value); int property_set(const char *key, constchar *value); int property_list(void (*propfn)(const char *key, constchar *value, void*cookie), void *cookie);
使用:
#include "cutils/properties.h" char prop[PROPERTY_VALUE_MAX] = "000"; if(property_get("prop_name", prop, NULL) != 0) { ... }
说明:
property_get返回值为get到的属性值的字符串长度.
prop_name为属性名.
prop为存放属性值字符串的地方.
Java语言 properties设置和获取的接口
frameworks/base/core/java/android/os/SystemProperties.java
<span style="font-size:14px;">public static final int PROP_NAME_MAX = 31; public static final int PROP_VALUE_MAX = 91; public static String get(String key) ; public static String get(String key, String def) ; public static int getInt(String key,int def) ; public static long getLong(String key,long def) ; public static boolean getBoolean(String key, boolean def) ; public static void set(String key, String val) ; public static void addChangeCallback(Runnable callback) ; </span>
遇到问题解决:
1.在Setting中添加开关使用getProperty()和setProperty()属性来进行属性的获取和设置,在命令行使用
adb shell getprop
来查看属性的值:
[persist.service.adb.enable]: [] [persist.sys.ams.recover]: [false] <span style="color:#FF0000;">[persist.sys.boot_music_control]: [1]</span> [persist.sys.bootpackage]: [1] [persist.sys.btn_auto_light]: [1]
2.在C++中获取不到build.prop中设置的属性值:
<span style="color:#FF0000;">persist.sys.boot_music_control</span>
解决:
//Modfy by jjli,control the boot and shutdown music char boot_music_control[PROPERTY_VALUE_MAX]; property_get("persist.sys.boot_music_control", boot_music_control, 1); int boot_music_value = atoi(boot_music_control); if (boot_music_value == 1) { mediastatus = mediaplayer->setDataSource(pBackupSoundFileName, NULL);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。