android增添电源键挂断电话

android添加电源键挂断电话首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键

android添加电源键挂断电话




            首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键来挂断电话,一般都是在设置中。



我主要是在原生源码中添加这一功能,主要用于学习。。。。先看一张图:

  android增添电源键挂断电话


看到那个按电源键挂断电话吧,那就是我所添加的,本来原生源码中是没有这一栏的。。。。。


大概思路:


首先我先添加这一个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权限)文件应该就可以了。