給android添加系統屬性:Settings.system和SystemProperties

來源:互聯網
上載者:User
SystemProperties與Settings.System

 

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

 
  1. public static final String SILVAN_LIU = "silvan_liu";  
  2.  public static final String[] SETTINGS_TO_BACKUP ={  
  3.             ~  
  4.        +SILVAN_LIU  
  5.               ~     
  6. }  

這樣添加後,你就是可以通過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的文法有關。

 

以上是我實際項目中運用到的地方,可能認識的不夠深刻,還需繼續摸索。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.