亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android 添加按(power鍵)電源鍵結束通話(掛斷電話)

2020-04-11 12:36:00
字體:
來源:轉載
供稿:網友
首先我們發現現在我們所用的android智能手機大部分都有當你在打電話時按power鍵來掛斷電話,一般都是在設置中。
我主要是在原生源碼中添加這一功能,主要用于學習。。。。先看一張圖:
 
看到那個按電源鍵掛斷電話吧,那就是我所添加的,本來原生源碼中是沒有這一欄的。。。。。

大概思路
首先我先添加這一個checkboxPreference,然后將是否選擇這一功能的值(0和1)存到data/data/com.android.providers.settings
/databases/settings.db數據庫的system表中
,然后再根據數據庫表中的值在PhoneWindownManager.java中去處理。

具體過程
首先找到setting的源碼,在源碼下我們要找到通話設置,在seting.xml中我們能找到
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px"> <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></SPAN>

這個call_settings就是我們在setting(設置)中看到的通話設置,但是我們卻不能在settings中的源碼中找到關于call_settings的布局文件, 因此我們需要找到它,其實這個布局文件是在package/app/Phone中,也就是在Phone這個app源碼的資源文件中。

因此我們在Phone的資源文件下能找到Call_feature_setting.xml文件如下:
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px"><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:phone="http://schemas.android.com/apk/res/com.android.phone"
android:title="@string/call_settings">
<PreferenceScreen
android:key="button_fdn_key"
android:title="@string/fdn"
android:summary="@string/sum_fdn"
android:persistent="false">
<intent android:action="android.intent.action.MAIN"
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.FdnSetting" />
</PreferenceScreen>
<PreferenceCategory
android:key="button_voicemail_category_key"
android:title="@string/voicemail"
android:persistent="false">
<ListPreference
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider"
android:summary="@string/sum_voicemail_choose_provider"
android:defaultValue=""
android:persistent="true"
/>
<PreferenceScreen android:key="button_voicemail_setting_key"
android:title="@string/voicemail_settings"
android:persistent="false">
<!-- Note for all com.android.phone.EditPhoneNumberPreference objects
The last several attributes are for use with the EditText field
in the dialog. These attributes are forwarded to that field
when the edittext is created. The attributes include:
1. android:singleLine
2. android:autoText
3. android:background -->
<com.android.phone.EditPhoneNumberPreference
android:key="button_voicemail_key"
android:title="@string/voicemail_settings_number_label"
android:persistent="false"
android:dialogTitle="@string/voicemail"
phone:confirmMode="confirm"
android:singleLine="true"
android:autoText="false" />
</PreferenceScreen>
</PreferenceCategory>
。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
</SPAN>

因此我們可以在最前面添加一個checkboxPreference
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px"><CheckBoxPreference
android:key="press_power_end_call_key"
android:title="@string/press_power_end_call"
android:persistent="false"/></SPAN>

變成
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px"><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:phone="http://schemas.android.com/apk/res/com.android.phone"
android:title="@string/call_settings">
<CheckBoxPreference
android:key="press_power_end_call_key"
android:title="@string/press_power_end_call"
android:persistent="false"/>
<PreferenceScreen
android:key="button_fdn_key"
android:title="@string/fdn"
android:summary="@string/sum_fdn"
android:persistent="false">
<intent android:action="android.intent.action.MAIN"
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.FdnSetting" />
</PreferenceScreen>
。。。。。。。
。。。。。。。
。。。。。。。</SPAN>

在這里有自己定義的
android:title="@string/press_power_end_call"
所以我們要在資源的string.xml文件中添加相關的信息:
在package/app/Phone/res/values/string.xml中添加:
<string name="press_power_end_call">press_power_end_call</string>
在package/app/Phone/res/values-zh-rCN/string.xml中添加:
<string name="press_power_end_call" msgid="4676390750360727396">按電源鍵掛斷電話</string>
到這里就算添加好了UI上的東西,接下來就是代碼了:
在package/app/Phone/src/com/android/phone下找到CallFeatureSetting.java文件,
在 public boolean onPreferenceChange(Preference preference, Object objValue) 方法中要增加一個如果選擇了按power鍵掛電話的事件:
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">//add by xxnan
else if (preference == press_power_end_call) {
//如果勾選就將1存到system表的press_power_end_call中
Settings.System.putInt(getContentResolver(),
"press_power_end_call",
press_power_end_call.isChecked() ? 1 : 0);
//end by xxnan </SPAN>

在OnCreate添加如下代碼之后
復制代碼 代碼如下:

protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
if (DBG) log("Creating activity");
mPhone = PhoneFactory.getDefaultPhone();
addPreferencesFromResource(R.xml.call_feature_setting);
//add by xxnan
ContentResolver resolver = getContentResolver();
press_power_end_call= (CheckBoxPreference)findPreference(press_power_end_call_key);
press_power_end_call.setOnPreferenceChangeListener(this);
// 獲的數據庫system表里press_power_end_call的值,也就是是否選擇了checkboxpreference
int press_power_end_call_key=Settings.System.getInt(getContentResolver(),
"press_power_end_call",0);
//如果得到的值是1,則下次打開setting的話,選項框要勾選
if(press_power_end_call_key==1)
press_power_end_call.setChecked(true);
//end by xxnan
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// get buttons
PreferenceScreen prefSet = getPreferenceScreen();
mSubMenuVoicemailSettings = (EditPhoneNumberPreference)findPreference(BUTTON_VOICEMAIL_KEY);
。。。。。。。
。。。。。。。

這樣就算差不多完成了到獲取是否開啟這一功能存放和取出到系統數據庫中,接下來就是到framework/base/policy/src/com/android
/internal/policy/impl下的
PhoneWindowManager.java中去處理了,之前我們就有分析到PhoneWindowManager.java中的
public int interceptKeyBeforeQueueing(long whenNanos, int action, int flags, int keyCode, int scanCode, int policyFlags,
boolean isScreenOn)方法來接受按power鍵的事件,在這個方法里我們只需要添加很少代碼:
原來代碼是
復制代碼 代碼如下:

case KeyEvent.KEYCODE_POWER: {
result &= ~ACTION_PASS_TO_USER;
if (down) {
Log.i("xxnan","xxnan"+"xiaxiangnan");
ITelephony telephonyService = getTelephonyService();
boolean hungUp = false;
if (telephonyService != null) {
try {
if (telephonyService.isRinging()) {
// Pressing Power while there's a ringing incoming
// call should silence the ringer.
telephonyService.silenceRinger();
} 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);
。。。。。。。。。。。。
。。。。。。。。。。。。

修改后
復制代碼 代碼如下:

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權限)文件應該就可以了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人午夜精品免费| 欧美黄色小视频| 国产91亚洲精品| 国产精品久久视频| 992tv成人免费视频| 日韩风俗一区 二区| 国产精品专区第二| 91免费视频国产| 欧美成人午夜视频| 亚洲国产欧美日韩精品| 亚洲午夜精品视频| 国语自产精品视频在线看一大j8| 成人免费直播live| 欧美国产激情18| 国外色69视频在线观看| 少妇激情综合网| 亚洲人成网站999久久久综合| 国产区亚洲区欧美区| 亚洲国产女人aaa毛片在线| 国产高清在线不卡| 国产不卡视频在线| 亚洲国产女人aaa毛片在线| 欧美—级高清免费播放| 中文字幕亚洲欧美日韩在线不卡| 欧美在线一级视频| 久热在线中文字幕色999舞| 亚洲人a成www在线影院| 97国产精品久久| 国语自产精品视频在线看抢先版图片| 亚洲网站在线观看| 久久久av免费| 欧美丝袜第一区| 国产一区香蕉久久| 亚洲的天堂在线中文字幕| 一区二区三区国产在线观看| 国产精品一区二区三区毛片淫片| 尤物九九久久国产精品的分类| 日韩电影在线观看永久视频免费网站| 亚洲国产精品人人爽夜夜爽| 91在线中文字幕| 亚洲乱亚洲乱妇无码| 亚洲自拍偷拍福利| 日日噜噜噜夜夜爽亚洲精品| 亚洲欧美一区二区三区在线| 欧美日韩国产成人在线| 精品视频一区在线视频| 91高清视频免费观看| 欧美成人精品一区二区三区| 国产成人一区二区三区电影| 欧美在线日韩在线| 欧美一区二区影院| 91在线播放国产| 亚洲男女自偷自拍图片另类| 欧美久久精品午夜青青大伊人| 欧美亚洲在线视频| 亚洲国产精品成人精品| 中文字幕不卡在线视频极品| 91av视频导航| 日韩免费在线观看视频| 日韩欧美亚洲一二三区| 国产a级全部精品| 国产在线视频91| 亚洲国产日韩欧美在线图片| 国产精品女主播视频| 日韩三级成人av网| 超薄丝袜一区二区| 国产精品视频内| 啊v视频在线一区二区三区| 久久久久久久国产精品视频| 精品久久香蕉国产线看观看gif| 亚洲欧美日韩网| 日韩在线播放一区| 久久人91精品久久久久久不卡| 亚洲一区999| 亚洲xxxx18| 亚洲视频免费一区| 精品中文字幕在线| 不卡在线观看电视剧完整版| www.亚洲免费视频| 97精品国产97久久久久久免费| 国产免费成人av| 日韩电影大全免费观看2023年上| 国产日韩精品视频| 欧美情侣性视频| 亚洲成人教育av| 777777777亚洲妇女| 亚洲影院高清在线| 亚洲丁香久久久| 国产精欧美一区二区三区| 亚洲欧美中文字幕在线一区| 久久久精品电影| 欧洲成人午夜免费大片| 亚洲天堂第二页| 日韩av免费看网站| 日韩在线精品一区| 亚洲最大激情中文字幕| 精品国产一区二区三区久久狼5月| 国内伊人久久久久久网站视频| 国产精品影院在线观看| 亚洲欧美一区二区精品久久久| 欧美性高跟鞋xxxxhd| 欧美精品一二区| 在线一区二区日韩| 国产精品免费一区| 国产福利视频一区二区| 亚洲国内精品视频| 亚洲成人激情视频| 欧美成人激情在线| 日韩在线视频一区| 国产欧美一区二区| 国产在线98福利播放视频| 国产精品夜色7777狼人| 亚洲视频在线免费看| 福利一区视频在线观看| 欧美在线视频在线播放完整版免费观看| 国产美女精品视频免费观看| 欧美性猛交xxxx乱大交极品| 欧美精品国产精品日韩精品| 国产精品久久久久不卡| 亚洲在线免费视频| 欧美日韩在线观看视频小说| xvideos亚洲人网站| 久久久91精品国产| 青青草国产精品一区二区| 北条麻妃在线一区二区| 成人黄色av免费在线观看| 91精品国产综合久久香蕉的用户体验| 国产噜噜噜噜噜久久久久久久久| 国产精品视频公开费视频| 欧美专区在线播放| 国产ts人妖一区二区三区| 国模精品视频一区二区| 久久久久久国产精品久久| 国产亚洲a∨片在线观看| 在线午夜精品自拍| 国产精品一香蕉国产线看观看| 97国产精品久久| 亚洲第一色中文字幕| 欧美精品videossex性护士| 另类天堂视频在线观看| 亚洲久久久久久久久久久| 91av在线播放视频| 欧美激情视频给我| 久久久久久12| 97国产精品视频人人做人人爱| 欧美成人精品一区| 亚洲激情免费观看| 欧美黑人xxxⅹ高潮交| 欧美精品电影免费在线观看| 亚洲xxx视频| 狠狠久久五月精品中文字幕| 亚洲欧美国产精品久久久久久久| 国产91成人在在线播放| 成人网在线观看| 伊人久久综合97精品| 欧美国产日韩一区| 亚洲国产精品99| 国产美女直播视频一区| 日韩激情片免费| 成人精品一区二区三区电影免费| 日本国产欧美一区二区三区| 亚洲欧美国产精品专区久久| 伊人久久久久久久久久久久久| 国产精品欧美风情|