首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android-怎么在系统settings里添加设置选项

2012-09-27 
android-如何在系统settings里添加设置选项版本:2.3.1目的:在通话设置菜单下,添加一dect设置菜单,里面再添

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>


android:targetPackage="com.android.phone" 
android:targetname="code"><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:target/> </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:targetname="code"> <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
<?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>

好了,总体布局已经完成
4.在\packages\apps\Phone\src\com\android\phone目录下
新增DectSettings.java文件

加载布局文件:      
//dect xml
addPreferencesFromResource(R.xml.dect_settings);
里面涉及到的MidPhoneServce服务,是自己添加的,主要通过此服务的AIDL接口跟硬件打交道。想了解系统服务,请网上查找资料。

源码如下:
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);}    }}

5.编译,烧录。
# . build/envsetup.sh
执行 # mmm packages/apps/Phone/
会在\out\target\product\generic\system\app 生成 Phone.apk文件
拷贝 此apk到 \out\target\product\smdkv210\system\app 目录下
编译就行: ./build_android
此时,才能看到修改的效果!

热点排行