SystemProperties與Settings.System

轉載自:https://www.cnblogs.com/wanqieddy/archive/2013/06/09/3128102.html

1 使用 SystemProperties.get
如果屬性名稱以“ro.”開頭,那麼這個屬性被視爲只讀屬性。一旦設置,屬性值不能改變。
如果屬性名稱以“persist.”開頭,當設置這個屬性時,其值也將寫入/data/property。

在c++中就是對應JAVA的兩個函數就是property_set, property_get,其實JAVA是通過JNI調用這兩個函數的。

JAVA代碼如下:
import android.os.SystemProperties;

SystemProperties.set(“persist.sys.language”, zone.getID());
String lang= SystemProperties.get(“persist.sys.language”);

獲取方法:

boolean fastfoodenable = SystemProperties.getBoolean(“persist.sys.fastfoodenable”, false);

設置方法:

SystemProperties.set(“persist.sys.fastfoodenable”, “true”);

C

#include <cutils/properties.h>

property_set(“persist.sys.language”, “zh”);
property_get(“persist.sys.language”, propLang, “en”);

在adb shell可以通過以下的命名讀取和修改

#getprop persist.sys.language
#setprop persist.sys.language zh

創建與修改android屬性用Systemproperties.set(name, value),獲取android屬性用Systemproperties.get(name),需要注意的是android屬性的名稱是有一定的格式要求的,如下: 前綴必須用system\core\init\property_service.c中定義的前綴 ,進行系統屬性設置的程序也必須有system或root權限

如果我們要添加一個property:例如:silvan_liu

路徑:system/core/rootdir/int.rc

在on post-fs-data 目錄下

setprop persist.sys.silvan_liu 1//persist.sys 前綴名; 1爲初始值

PS:不同前綴名權限不同,這裏就不一一說明;還有爲什麼要加載on post-fs-data目錄下,這和int.rc的語法有關

2 使用 Settings.System.putInt

這種方式會保存變量到Settings 數據庫中,飛行模式等的開關就是用這種方式實現的。

首先需要定義一個系統屬性值

路徑:frameworks/base/core/java/android/provider/Settings.java

public static final String VIVIEN_FASTFOOD= “hungry”;

1)獲取方法如下:

@Override

public void onResume()

{

  super.onResume();

  if(Settings.System.getInt(getContentResolver(), Settings.System.VIVIEN_FASTFOOD,0)==1)

   {

  mYesORNo.setChecked(true);

   }

  else

  mYesORNo.setChecked(false);

}

2)設置

if (mYesORNo.isChecked()) {

          Settings.System.putInt(getContentResolver(),

                 Settings.System.VIVIEN_FASTFOOD, 1);

       } else {

          Settings.System.putInt(getContentResolver(),

                 Settings.System.VIVIEN_FASTFOOD, 0);

       }

需要import android.provider.Settings;


from:http://blog.csdn.net/k1102k27/article/details/7106124

android源碼開發中,常常要用到一些全局標誌或者說變量,這時候我們可以給android系統添加自己想要的屬性。

1.Settings.system

這種系統屬性我們經常用到,例如飛行模式的開啓和關閉,我們就是去改變Settings.system.AIRPLANE_MODE_ON 的值。

下面就介紹下我們怎樣去定義一個系統屬性。例如要添加一個屬性名爲“SILVAN_LIU”

路徑:frameworks/base/core/java/android/provider/Settings.java

[java] view plaincopy

public static final String SILVAN_LIU = “silvan_liu”;
public static final String[] SETTINGS_TO_BACKUP ={
~
+SILVAN_LIU
~
}
這樣添加後,你就是可以通過Settings.System.getInt(getContentResolver(), Settings.System.SILVAN_LIU,0) 和Settings.System.getInt(getContentResolver(), Settings.System.SILVAN_LIU,0)去得到和設定SILVAN_LIU的屬性值。

2.SystemProperties

創建與修改android屬性用Systemproperties.set(name, value),獲取android屬性用Systemproperties.get(name),需要注意的是android屬性的名稱是有一定的格式要求的,如下: 前綴必須用system\core\init\property_service.c中定義的前綴 ,進行系統屬性設置的程序也必須有system或root權限

如果我們要添加一個property:例如:silvan_liu

路徑:system/core/rootdir/int.rc

在on post-fs-data 目錄下

setprop persist.sys.silvan_liu 1//persist.sys 前綴名; 1爲初始值

PS:不同前綴名權限不同,這裏就不一一說明;還有爲什麼要加載on post-fs-data目錄下,這和int.rc的語法有關。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章