现在的位置: 首页 > 移动开发 > 正文

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

2019年01月04日 移动开发 ⁄ 共 2642字 ⁄ 字号 评论关闭

Android命令行/c语言/java设置获取系统属性的方法

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

抱歉!评论已关闭.