`
koliy
  • 浏览: 148705 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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: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,根据类名,很容易找到布局文件。
里面内容如下:
<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的类名.
        <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">
        
      <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接口跟硬件打交道。想了解系统服务,请网上查找资料。

源码如下:
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.编译,烧录。
# . build/envsetup.sh
执行 # mmm packages/apps/Phone/
会在\out\target\product\generic\system\app 生成 Phone.apk文件
拷贝 此apk到 \out\target\product\smdkv210\system\app 目录下
编译就行: ./build_android
此时,才能看到修改的效果!
2
0
分享到:
评论

相关推荐

    0001-Android-Settings-displaySettings.patch

    该补丁用在rk3288android5.1上,在设置-&gt;显示 里添加了一个"永久隐藏状态栏和虚拟按键"的选项,文件名:0001-Android-Settings-displaySettings.patch

    0001-Android-Settings-displaySettings_RK3288_

    在Android系统中,"Settings"模块是用户与设备设置交互的核心部分,而"Display settings"则是其中至关重要的一环,它涵盖了屏幕亮度、显示分辨率、屏幕方向等与视觉体验相关的选项。"0001-Android-Settings-display...

    Android6.0 Settings添加以太网选项

    "Android6.0 Settings添加以太网选项"这个主题意味着我们要在Android 6.0(Marshmallow)的设置应用中新增一个以太网连接的选项,使得设备可以通过有线连接进行网络通信。这通常适用于需要更稳定网络连接的场景,...

    android 8.1设置添加Ethernet功能选项

    &lt;activity android:name="Settings$EthernetSettingsActivity" android:label="@string/ethernet_settings_title" android:icon="@drawable/ic_settings_wireless" android:taskAffinity=""&gt; &lt;intent-filter&gt; ...

    Android 8.0 系统自带 Settings

    在Android操作系统中,"Settings"应用是用户与系统设置交互的核心界面,提供了对设备各种功能进行配置和个性化调整的入口。在Android 8.0版本中,Settings应用进行了多项优化和改进,旨在提升用户体验和系统性能。...

    Android-Settings-Ethernet-master.zip

    通过分析和修改"Android-Settings-Ethernet-master.zip"中的代码,开发者或系统集成商可以将静态IP设置功能整合到自定义的Android构建中,为用户提供更灵活的网络管理选项。这个过程可能涉及到编译Android源码、调试...

    Android_P_Settings_Framework_ethernet_patch.rar

    在Android系统中,Settings应用是用户与系统设置交互的主要界面。在Android P中,Settings应用可能添加了新的界面元素和逻辑,允许用户轻松地开启或关闭以太网连接,类似于已有的Wi-Fi和移动数据选项。此外,该patch...

    Android6Settings添加以太网选项

    在Android 6.0(Marshmallow)系统中,开发者为用户界面增加了对以太网连接的支持,这使得设备可以通过有线网络进行连接,为用户提供了一种替代Wi-Fi的连接方式。这一更新对于需要稳定高速网络连接的场景尤其有用,...

    安卓Settings、系统自带设置软件源码

    例如,修改系统设置通常需要"android.permission.WRITE_SETTINGS"权限。 Android的Settings应用还包含了对首选项的处理。Preferences是用户设置的数据结构,可以是开关、选择列表或其他类型。这些首选项在代码中...

    Android应用源码之Settings.zip

    在Android操作系统中,Settings应用是用户与系统配置进行交互的主要界面,它提供了一系列的系统设置选项,让用户能够根据个人需求调整设备的各项功能。通过对Settings应用的源码分析,我们可以深入了解Android系统的...

    Android Settings

    例如,`SettingsProvider`是系统级别的ContentProvider,它处理系统设置的读写操作。当用户在设置界面更改一项设置时,ContentResolver会向对应的ContentProvider发起更新请求,从而实现数据的持久化。 ...

    android 8.1设置添加Ethernet功能选项patch文件

    + &lt;activity android:name="Settings$EthernetSettingsActivity" + android:label="@string/ethernet_settings_title" + android:icon="@drawable/ic_settings_wireless" + android:taskAffinity=""&gt; + &lt;intent-...

    android 源码settings 导入eclipse

    Android Settings应用是用户与系统设置交互的主要界面,包含了网络、显示、应用程序、安全等众多设置选项。其源码包含了大量的Activity、PreferenceFragment以及Service,涉及到Android系统的各种核心功能和API调用...

    Android-EasyTabs让您可以轻松实现自定义选项卡控件

    在Android应用开发中,设计美观且易于使用的用户界面是至关重要的。`EasyTabs`库就是为了帮助开发者快速、简便地创建自定义...通过掌握`EasyTabs`的使用,您可以在Android应用中创建出具有吸引力和功能性的选项卡界面。

    android原生设置休眠添加永不休眠选项

    资源为代码patch,主要修复设置-显示-休眠中无永不休眠选项。为防止语言资源导致报错,重新在arrays添加选项,永不休眠原理只是将时间设置为Integer.MAX_VALUE

    android_packages_apps_Settings,.zip

    在Android系统中,`android_packages_apps_Settings`扮演着至关重要的角色,它是系统设置应用的核心组件,承载着用户对设备的各种个性化配置。开源项目的标签揭示了我们可以深入研究其内部机制,为理解和定制Android...

    Android Settings 源码

    Android支持第三方应用添加自定义设置到系统设置中。通过注册BroadcastReceiver监听ACTION_ADD_SYSTEM_SETTING广播,应用可以将自己的设置项添加到系统设置中。 七、总结 Android Settings的源码深入展示了如何...

    Android-v7亲测可用Eclipse使用

    在弹出的属性窗口中,导航到"Android"选项卡。在这里,你可以看到“Library”部分,点击“Add...”按钮,从已有的项目中选择刚导入的`Android-v7`库项目,这样就添加了库依赖。 为了确保一切正常,你需要检查`...

    RK7.1 添加以太网接口,并在设置-显示中添加以太网开关 代码patch

    1. `0001-N4-Add-Ethernet-level-one-menu-in-Settings.patch`:这个补丁可能用于在设置菜单的顶级层级添加以太网选项,使用户能快速访问以太网设置。 2. `0002-N4-add-Ethernet-SwitchButton-In-Settings-Ethernet....

Global site tag (gtag.js) - Google Analytics