在Android系統settings裡新增設定選項
阿新 • • 發佈:2019-02-01
目的:在通話設定選單下,新增一dect設定選單,裡面再新增一checkBOxPreference
來使能硬體模組。
-------------------------
目前做的專案,需要在系統settings裡面新增一選項來使能硬體模組,裡面涉及到的preference知識,請網上了解,這裡記錄下方法。
1,settings 應用一般在 目錄:\packages\apps\Settings,我們先找到通話設定的佈局位置,看看它在那個包路徑下,進入\packages\apps\Settings\res\xml,開啟settings.xml檔案:
Java程式碼
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.CallFeaturesSetting"
targetPackage:表示包名,根據此我們可以找到通話設定的路徑。
targetClass:表示此佈局檔案被那個類所引用,根據此類,我們可以知道在那個檔案裡面管理我們的通話設定功能。
2.根據包名,我們可以看到在\packages\apps\Phone 目錄下,進入\res\xml目錄下
找到通話佈局檔案:call_feature_setting.xml,根據類名,很容易找到佈局檔案。
裡面內容如下:
Java程式碼
Dect setting 就是新新增進入的設定選單,我們的原則儘量不大量修改原始碼,所以新增一個PreferenceScreen,新增一個類檔案來管理DECt選單選項。
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.DectSettings"
我們指明瞭包名,類名後,因這是個activity,所以我們需要到Phone目錄下修改
AndroidManifest.xml檔案,指明啟動的activity的類名.
Java程式碼
3.修改好後,我們必須在此activity裡新增preference佈局檔案。
在此目錄Phone\res\xml下,新增dect_settings.xml
Java程式碼
好了,總體佈局已經完成
4.在\packages\apps\Phone\src\com\android\phone目錄下
新增DectSettings.java檔案
載入佈局檔案:
//dect xml
addPreferencesFromResource(R.xml.dect_settings);
裡面涉及到的MidPhoneServce服務,是自己新增的,主要通過此服務的AIDL介面跟硬體打交道。想了解系統服務,請網上查詢資料。
原始碼如下:
Java程式碼
5.編譯,燒錄。
來使能硬體模組。
-------------------------
目前做的專案,需要在系統settings裡面新增一選項來使能硬體模組,裡面涉及到的preference知識,請網上了解,這裡記錄下方法。
1,settings 應用一般在 目錄:\packages\apps\Settings,我們先找到通話設定的佈局位置,看看它在那個包路徑下,進入\packages\apps\Settings\res\xml,開啟settings.xml檔案:
Java程式碼
-
<com.android.settings.IconPreferenceScreen
- android:key="call_settings"
- settings:icon="@drawable/ic_settings_call"
- android:title="@string/call_settings_title">
- <intent
- android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.phone"
-
android:targetClass="com.android.phone.CallFeaturesSetting"
- </com.android.settings.IconPreferenceScreen>
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.CallFeaturesSetting"
targetPackage:表示包名,根據此我們可以找到通話設定的路徑。
targetClass:表示此佈局檔案被那個類所引用,根據此類,我們可以知道在那個檔案裡面管理我們的通話設定功能。
2.根據包名,我們可以看到在\packages\apps\Phone 目錄下,進入\res\xml目錄下
找到通話佈局檔案:call_feature_setting.xml,根據類名,很容易找到佈局檔案。
裡面內容如下:
Java程式碼
- <PreferenceCategory android:key="button_misc_category_key"
- android:title="@string/other_settings"
- android:persistent="false" />
- <!-- Dect settings -->
- <PreferenceScreen
- android:key="dect_settings"
- android:title="@string/dect_module_title"
- android:summary="@string/dect_module_title" >
- <intent
- android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.phone"
- android:targetClass="com.android.phone.DectSettings" />
- </PreferenceScreen>
- <CheckBoxPreference
- android:key="button_auto_retry_key"
- android:title="@string/auto_retry_mode_title"
- android:persistent="false"
- android:summary="@string/auto_retry_mode_summary"/>
Dect setting 就是新新增進入的設定選單,我們的原則儘量不大量修改原始碼,所以新增一個PreferenceScreen,新增一個類檔案來管理DECt選單選項。
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.DectSettings"
我們指明瞭包名,類名後,因這是個activity,所以我們需要到Phone目錄下修改
AndroidManifest.xml檔案,指明啟動的activity的類名.
Java程式碼
- <activity android:name="CdmaCallOptions"
- android:label="@string/cdma_options">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- </intent-filter>
- </activity>
- <!-- dect activity -->
- <activity android:name="DectSettings"
- android:label="@string/dect_module_title">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- </intent-filter>
- </activity>
3.修改好後,我們必須在此activity裡新增preference佈局檔案。
在此目錄Phone\res\xml下,新增dect_settings.xml
Java程式碼
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/dect_module_title">
- <CheckBoxPreference
- android:key="button_dect_module_key"
- android:title="@string/dect_module_title"
- android:defaultValue="true"
- android:summaryOn="@string/dect_module_start"
- android:summaryOff="@string/dect_module_stop"
- />
- </PreferenceScreen>
好了,總體佈局已經完成
4.在\packages\apps\Phone\src\com\android\phone目錄下
新增DectSettings.java檔案
載入佈局檔案:
//dect xml
addPreferencesFromResource(R.xml.dect_settings);
裡面涉及到的MidPhoneServce服務,是自己新增的,主要通過此服務的AIDL介面跟硬體打交道。想了解系統服務,請網上查詢資料。
原始碼如下:
Java程式碼
- package com.android.phone;
- import android.content.DialogInterface;
- import android.os.AsyncResult;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.preference.CheckBoxPreference;
- import android.preference.Preference;
- import android.preference.PreferenceActivity;
- import android.preference.PreferenceScreen;
- import android.content.SharedPreferences;
- import android.content.SharedPreferences.Editor;
- import android.content.pm.ActivityInfo;
- import android.content.pm.PackageManager;
- import android.content.pm.ResolveInfo;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- import android.content.Context;
- import com.android.phone.R;
- import android.os.IMidPhoneService;
- import android.os.RemoteException;
- import android.os.ServiceManager;
- import android.provider.Settings;
- public class DectSettings extends PreferenceActivity {
- private static final String TAG = "DectSettings";
- private static final String BUTTON_DECT_KEY = "button_dect_module_key";
- private CheckBoxPreference mButtonDect;
- public IMidPhoneService midphoneservice = null;
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- //dect xml
- addPreferencesFromResource(R.xml.dect_settings);
- mButtonDect = (CheckBoxPreference)findPreference(BUTTON_DECT_KEY);
- mButtonDect.setPersistent(false);
- if(mButtonDect != null) {
- int dect_state = Settings.System.getInt(
- getContentResolver(),Settings.System.DECT_SAVED_STATE, 1);
- mButtonDect.setChecked( dect_state!= 0);
- Settings.System.putInt(getContentResolver(),
- Settings.System.DECT_SAVED_STATE,dect_state);
- Log.e(TAG,"settings:------------->" + dect_state);
- }
- }
- @Override
- public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- if (preference == mButtonDect ) {
- int dect = mButtonDect.isChecked() ? 1 : 0;
- boolean state;
- if(dect == 1)
- state = true;
- else
- state = false;
- try{
- midphoneservice = IMidPhoneService.Stub.asInterface(ServiceManager.getService("midphone"));
- Settings.System.putInt(getContentResolver(),
- Settings.System.DECT_SAVED_STATE,dect);
- midphoneservice.setDectEnabled(state);
- Log.e(TAG,"settings:------------->" + dect);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- return true;
- }
- return false;
- }
- @Override
- protected void onResume() {
- super.onResume();
- if (mButtonDect != null) {
- mButtonDect.setChecked(Settings.System.getInt(
- getContentResolver(),
- Settings.System.DECT_SAVED_STATE, 1) != 0);
- }
- }
- }
5.編譯,燒錄。