android-如何在系统settings里添加设置选项

简介:
版本:2.3.1 
目的:在通话设置菜单下,添加一dect设置菜单,里面再添加一checkBOxPreference 
来使能硬件模块。 
------------------------- 
目前做的项目,需要在系统settings里面添加一选项来使能硬件模块,里面涉及到的preference知识,请网上了解,这里记录下方法。 


1,settings 应用一般在 目录:\packages\apps\Settings,我们先找到通话设置的布局位置,看看它在那个包路径下,进入\packages\apps\Settings\res\xml,打开settings.xml文件: 
Java代码   收藏代码
  1. <com.android.settings.IconPreferenceScreen  
  2.     android:key="call_settings"  
  3.     settings:icon="@drawable/ic_settings_call"  
  4.     android:title="@string/call_settings_title">  
  5.     <intent  
  6.         android:action="android.intent.action.MAIN"  
  7.         android:targetPackage="com.android.phone"  
  8.         android:targetClass="com.android.phone.CallFeaturesSetting" />  
  9. </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代码   收藏代码
  1. <PreferenceCategory android:key="button_misc_category_key"  
  2.         android:title="@string/other_settings"  
  3.         android:persistent="false" />  
  4.           
  5.   
  6. <!-- Dect settings -->  
  7.     <PreferenceScreen  
  8.           
  9.         android:key="dect_settings"  
  10.         android:title="@string/dect_module_title"  
  11.         android:summary="@string/dect_module_title" >  
  12.         <intent  
  13.             android:action="android.intent.action.MAIN"  
  14.             android:targetPackage="com.android.phone"  
  15.             android:targetClass="com.android.phone.DectSettings" />              
  16.     </PreferenceScreen>  
  17.       
  18.     <CheckBoxPreference  
  19.         android:key="button_auto_retry_key"  
  20.         android:title="@string/auto_retry_mode_title"  
  21.         android:persistent="false"  
  22.         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代码   收藏代码
  1.       <activity android:name="CdmaCallOptions"  
  2.           android:label="@string/cdma_options">  
  3.           <intent-filter>  
  4.               <action android:name="android.intent.action.MAIN" />  
  5.           </intent-filter>  
  6.       </activity>  
  7. <!-- dect activity -->  
  8.       <activity android:name="DectSettings"  
  9.           android:label="@string/dect_module_title">  
  10.           <intent-filter>  
  11.               <action android:name="android.intent.action.MAIN" />  
  12.           </intent-filter>  
  13.       </activity>  

3.修改好后,我们必须在此activity里添加preference布局文件。 
  在此目录Phone\res\xml下,新增dect_settings.xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:title="@string/dect_module_title">  
  4.           
  5.       <CheckBoxPreference  
  6.         android:key="button_dect_module_key"  
  7.         android:title="@string/dect_module_title"  
  8.         android:defaultValue="true"  
  9.         android:summaryOn="@string/dect_module_start"  
  10.         android:summaryOff="@string/dect_module_stop"  
  11.         />    
  12.   
  13. </PreferenceScreen>  

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

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

源码如下: 
Java代码   收藏代码
  1. package com.android.phone;  
  2.   
  3. import android.content.DialogInterface;  
  4. import android.os.AsyncResult;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7. import android.os.Message;  
  8. import android.preference.CheckBoxPreference;  
  9. import android.preference.Preference;  
  10. import android.preference.PreferenceActivity;  
  11. import android.preference.PreferenceScreen;  
  12. import android.content.SharedPreferences;  
  13. import android.content.SharedPreferences.Editor;  
  14. import android.content.pm.ActivityInfo;  
  15. import android.content.pm.PackageManager;  
  16. import android.content.pm.ResolveInfo;  
  17. import android.os.Bundle;  
  18. import android.os.Handler;  
  19. import android.util.Log;  
  20. import android.content.Context;  
  21. import com.android.phone.R;  
  22. import android.os.IMidPhoneService;  
  23. import android.os.RemoteException;  
  24. import android.os.ServiceManager;  
  25. import android.provider.Settings;  
  26.   
  27. public class DectSettings extends PreferenceActivity {  
  28.     private static final String TAG = "DectSettings";  
  29.     
  30.     private static final String BUTTON_DECT_KEY  = "button_dect_module_key";  
  31.       
  32.     private CheckBoxPreference mButtonDect;  
  33.     public IMidPhoneService midphoneservice = null;  
  34.   
  35.     @Override  
  36.     protected void onCreate(Bundle icicle) {  
  37.         super.onCreate(icicle);  
  38.   
  39.             //dect xml  
  40.         addPreferencesFromResource(R.xml.dect_settings);  
  41.   
  42.         mButtonDect = (CheckBoxPreference)findPreference(BUTTON_DECT_KEY);  
  43.         mButtonDect.setPersistent(false);  
  44.   
  45.         if(mButtonDect != null) {  
  46.               
  47.             int dect_state = Settings.System.getInt(  
  48.                 getContentResolver(),Settings.System.DECT_SAVED_STATE, 1);  
  49.             mButtonDect.setChecked( dect_state!= 0);  
  50.               
  51.             Settings.System.putInt(getContentResolver(),  
  52.                         Settings.System.DECT_SAVED_STATE,dect_state);  
  53.             Log.e(TAG,"settings:------------->" + dect_state);  
  54.         }  
  55.     }  
  56.   
  57.     @Override  
  58.     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {  
  59.         if (preference == mButtonDect ) {  
  60.   
  61.             int dect = mButtonDect.isChecked() ? 1 : 0;       
  62.             boolean state;  
  63.             if(dect == 1)  
  64.                 state = true;  
  65.             else  
  66.                 state = false;  
  67.             try{  
  68.                     midphoneservice = IMidPhoneService.Stub.asInterface(ServiceManager.getService("midphone"));  
  69.                     Settings.System.putInt(getContentResolver(),  
  70.                         Settings.System.DECT_SAVED_STATE,dect);  
  71.                     midphoneservice.setDectEnabled(state);  
  72.   
  73.                     Log.e(TAG,"settings:------------->" + dect);  
  74.                 } catch (RemoteException e) {  
  75.                     e.printStackTrace();  
  76.                 }  
  77.             return true;  
  78.         }  
  79.         return false;  
  80.     }  
  81.       
  82.   @Override  
  83.     protected void onResume() {  
  84.         super.onResume();  
  85.   
  86.         if (mButtonDect != null) {  
  87.             mButtonDect.setChecked(Settings.System.getInt(  
  88.                 getContentResolver(),  
  89.                 Settings.System.DECT_SAVED_STATE, 1) != 0);  
  90.         }  
  91.     }  
  92. }  

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 
此时,才能看到修改的效果!
相关文章
|
4月前
|
Android开发 开发者
Android设置View是否可用
在Android开发中,有时需要将布局设置为不可点击状态(失去焦点)。常见的解决方法是使用`setOnClickListener(null)`,但本文介绍一种更通用的方式:通过封装`setViewEnabled`方法实现。该方法可递归设置View及其子View的启用状态,支持传入目标View和布尔值(`true`为可用,`false`为禁用)。例如,调用`setViewEnabled(edittext, false)`即可禁用EditText。文章附有源码及示例动图,帮助开发者快速理解与应用。
101 1
|
4月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
293 2
|
10月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
5月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
180 18
|
10月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
9月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
9月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
10月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
134 11
|
6月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1167 77

热门文章

最新文章