android-如何在系统settings里添加设置选项
版本:2.3.1
目的:在通话设置菜单下,添加一dect设置菜单,里面再添加一checkBOxPreference
来使能硬件模块。
-------------------------
目前做的项目,需要在系统settings里面添加一选项来使能硬件模块,里面涉及到的preference知识,请网上了解,这里记录下方法。
1,settings 应用一般在 目录:\packages\apps\Settings,我们先找到通话设置的布局位置,看看它在那个包路径下,进入\packages\apps\Settings\res\xml,打开settings.xml文件:
<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:target/> </com.android.settings.IconPreferenceScreen>
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/dect_module_title"> <CheckBoxPreferenceandroid: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>
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 xmladdPreferencesFromResource(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;elsestate = 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);} }}