您的位置:首页 > 移动开发 > Android开发

Android framework开发全局系统属性设置与获取

2016-02-27 11:19 721 查看
本文转载 http://blog.csdn.net/qq435757399/article/details/30270875
Android命令行/c语言/java设置获取系统属性的方法

Java中设置和获取SystemProperty属性:

[java] view
plain copy







SystemProperties.getInt("persist.sys.boot_music_control", 0)

SystemProperties.set("persist.sys.boot_music_control", ""+value);

C++中获取Java层中设置的属性值:

[java] view
plain copy







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设置和获取接口

代码定义在:

[java] view
plain copy







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);

使用:

[java] view
plain copy







#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

[java] view
plain copy







<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()属性来进行属性的获取和设置,在命令行使用

[java] view
plain copy







adb shell getprop

来查看属性的值:

[java] view
plain copy







[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中设置的属性值:

[java] view
plain copy







<span style="color:#FF0000;">persist.sys.boot_music_control</span>

解决:

[java] view
plain copy







//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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: