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

本文转载 http://blog.csdn.net/qq435757399/article/details/30270875

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. SystemProperties.getInt("persist.sys.boot_music_control"0)  
  2.   
  3. SystemProperties.set("persist.sys.boot_music_control"""+value);  
C++中获取Java层中设置的属性值:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. char boot_music_control[PROPERTY_VALUE_MAX];  
  2.  if (property_get("persist.sys.boot_music_control", boot_music_control, 0) != 0) {  
  3.      mediastatus = mediaplayer->setDataSource(pBackupSoundFileName, NULL);  
  4.  }  
    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
  在CODE上查看代码片 派生到我的代码片
  1. system/core/libcutils/properties.c  
  2.    
  3. #define PROPERTY_KEY_MAX   32  
  4. #define PROPERTY_VALUE_MAX  92  
  5.    
  6. int property_get(const char *key, char*value, const char *default_value);  
  7. int property_set(const char *key, constchar *value);  
  8. int property_list(void (*propfn)(const char *key, constchar *value, void*cookie), void *cookie);     
使用:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include "cutils/properties.h"  
  2.    
  3. char prop[PROPERTY_VALUE_MAX] = "000";  
  4. if(property_get("prop_name", prop, NULL) != 0) {  
  5.     ...  
  6. }  
说明:
    property_get返回值为get到的属性值的字符串长度.
    prop_name为属性名.
    prop为存放属性值字符串的地方.
 Java语言 properties设置和获取的接口
frameworks/base/core/java/android/os/SystemProperties.java
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;">public static final int PROP_NAME_MAX = 31;  
  2. public static final int PROP_VALUE_MAX = 91;  
  3. public static String get(String key) ;  
  4. public static String get(String key, String def) ;  
  5. public static int getInt(String key,int def) ;  
  6. public static long getLong(String key,long def) ;  
  7. public static boolean getBoolean(String key, boolean def) ;  
  8. public static void set(String key, String val) ;  
  9. public static void addChangeCallback(Runnable callback) ;  
  10. </span>  

遇到问题解决:

1.在Setting中添加开关使用getProperty()和setProperty()属性来进行属性的获取和设置,在命令行使用

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. adb shell getprop  

来查看属性的值:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [persist.service.adb.enable]: []  
  2. [persist.sys.ams.recover]: [false]  
  3. <span style="color:#FF0000;">[persist.sys.boot_music_control]: [1]</span>  
  4. [persist.sys.bootpackage]: [1]  
  5. [persist.sys.btn_auto_light]: [1]  
2.在C++中获取不到build.prop中设置的属性值:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="color:#FF0000;">persist.sys.boot_music_control</span>  

解决:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.                      //Modfy by jjli,control the boot and shutdown music   
  2. char boot_music_control[PROPERTY_VALUE_MAX];      
  3. property_get("persist.sys.boot_music_control", boot_music_control, 1);  
  4. int boot_music_value = atoi(boot_music_control);      
  5. if (boot_music_value == 1) {      
  6. mediastatus = mediaplayer->setDataSource(pBackupSoundFileName, NULL);  

猜你喜欢

转载自blog.csdn.net/Vincent20111024/article/details/50754370
今日推荐