android添加电源键挂断电话首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键
android添加电源键挂断电话
首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键来挂断电话,一般都是在设置中。
我主要是在原生源码中添加这一功能,主要用于学习。。。。先看一张图:

看到那个按电源键挂断电话吧,那就是我所添加的,本来原生源码中是没有这一栏的。。。。。
大概思路:
首先我先添加这一个checkboxPreference,然后将是否选择这一功能的值(0和1)存到data/data/com.android.providers.settings/databases/settings.db数据库的system表中
,然后再根据数据库表中的值在PhoneWindownManager.java中去处理。
具体过程:
首先找到setting的源码,在源码下我们要找到通话设置,在seting.xml中我们能找到
case KeyEvent.KEYCODE_POWER: { result &= ~ACTION_PASS_TO_USER; if (down) { Log.i("xxnan","xxnan"+"xiaxiangnan"); int end_call_key=Settings.System.getInt(mContext.getContentResolver(), "press_power_end_call",0); //取出数据库中是否打开这一功能的值 Log.i("end_call_key","end_call_key="+end_call_key); ITelephony telephonyService = getTelephonyService(); boolean hungUp = false; if (telephonyService != null) { try { //如果是电话正在打且开启了这一功能,当按power键就挂掉电话 if (telephonyService.isRinging()&&end_call_key==1) { // Pressing Power while there's a ringing incoming // call should silence the ringer. // telephonyService.silenceRinger(); hungUp=telephonyService.endCall(); } else if ((mIncallPowerBehavior & Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP) != 0 && telephonyService.isOffhook()) { // Otherwise, if "Power button ends call" is enabled, // the Power button will hang up any current active call. hungUp = telephonyService.endCall(); } } catch (RemoteException ex) { Log.w(TAG, "ITelephony threw RemoteException", ex); } } interceptPowerKeyDown(!isScreenOn || hungUp);。。。。。。。。。。。。。。。。。。。。。。由于我这个开发板上是不能插电话卡的也就没能实验成功,但是原理应该就这样的!最后修改过的地方都要重新编译,那么我们要在源码下编译app下的Phone以及framework下的policy
最后生成的out/。。。/system/app/Phone.apk和out/。。。。/system/framework/android.policy.jar都要替换
手机里的相同(adb shell 进入你的手机,要有root权限)文件应该就可以了。
