android power 按键,Android Framework层Power键关机流程(一,Power长按键操作处理)
一:Android處理Power按鍵長按操作
在Framework層中,Android4.x對Power鍵(KeyEvent.KEYCODE_POWER)的操作,我們從PhoneWindowManager開始分析,在分析前我這里打印了該方法的堆棧調用信息。大家可以參考一下。
public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
......
android.util.Log.d("BILL",android.util.Log.getStackTraceString(new Throwable()));
......
}
1-13 19:35:32.458 D/BILL ? ?( ?718): java.lang.Throwable
01-13 19:35:32.458 D/BILL ? ?( ?718):
at com.android.internal.policy.impl.PhoneWindowManager.interceptKeyBeforeDispatching(PhoneWindowManager.java:2224)
01-13 19:35:32.458 D/BILL ? ?( ?718):
at com.android.server.wm.InputMonitor.interceptKeyBeforeDispatching(InputMonitor.java:501)
01-13 19:35:32.458 D/BILL ? ?( ?718):
at com.android.server.input.InputManagerService.interceptKeyBeforeDispatching(InputManagerService.java:1383)
01-13 19:35:32.458 D/BILL ? ?( ?718):
at dalvik.system.NativeStart.run(Native Method)
調用流程如下(只貼出關鍵代碼):
interceptKeyBeforeDispatching()-->interceptPowerKeyDown()-->mPowerLongPress.run()
1>
public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
......
case KeyEvent.KEYCODE_POWER: {
result &= ~ACTION_PASS_TO_USER;
if (down) {
mImmersiveModeConfirmation.onPowerKeyDown(isScreenOn, event.getDownTime(),
isImmersiveMode(mLastSystemUiFlags));
if (isScreenOn && !mPowerKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mPowerKeyTriggered = true;
mPowerKeyTime = event.getDownTime();
interceptScreenshotChord();
}
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();
/// M: [ALPS00093981] @{
} else if ((isScreenOn
|| ?mScreenOffReason == OFF_BECAUSE_OF_PROX_SENSOR)
/// @}
&& (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
|| mVolumeDownKeyTriggered || mVolumeUpKeyTriggered);
} else {
mPowerKeyTriggered = false;
cancelPendingScreenshotChordAction();
if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) {
result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP;
}
mPendingPowerKeyUpCanceled = false;
}
break;
}
......
}
注!紅色為判斷長按(down),藍色為判斷短按(up)。
2>
private void interceptPowerKeyDown(boolean handled) {
mPowerKeyHandled = handled;
if (!handled) {
mHandler.postDelayed(mPowerLongPress, ViewConfiguration.getGlobalActionKeyTimeout());
}
}
3>
private final Runnable mPowerLongPress = new Runnable() {
......
case LONG_PRESS_POWER_GLOBAL_ACTIONS:
mPowerKeyHandled = true;
if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {
performAuditoryFeedbackForAccessibilityIfNeed();
}
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
showGlobalActionsDialog();
break;
case LONG_PRESS_POWER_SHUT_OFF:
case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
mPowerKeyHandled = true;
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
mWindowManagerFuncs.shutdown(resolvedBehavior == LONG_PRESS_POWER_SHUT_OFF);
break;
......
};
注:上述代碼中下劃線即彈出(關機、重啟、飛行模式等選項)的對話框。
Android Framework層Power鍵關機流程(二,關機流程)
二,關機流程 從前一篇博文我們知道,當用戶長按Power鍵時會彈出(關機.重啟,飛行模式等選項)對話框,我們點擊關機,則會彈出關機確認對話框.那么從選項對話框到關機確認對話框又是一個什么流程呢.下面我 ...
怎樣從C++代碼直接訪問android framework層的WifiService
說究竟,Java層的service就是就C++層的binder的封裝.所以從原理上來講通過C++代碼直接訪問android framework層的service是全然可能的,這篇文章以訪問WifiSe ...
Android framework層實現實現wifi無縫切換AP
http://www.linuxidc.com/Linux/2013-12/93476.htm Android市場上有一款叫Wifijumper的軟件,實現相同ssid的多個AP之間根據wifi信號的 ...
Android的NDK開發(5)————Android JNI層實現文件的read、write與seek操作
1. 在Android的Java層實現文件的讀寫操作是非常簡單的,可以參看之前寫的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...
如何調試Android Framework?
Linus有一句名言廣為人知:Read the fucking source code. 但其實,要深入理解某個軟件.框架或者系統的工作原理,僅僅「看」代碼是遠遠不夠的.就拿Android Frame ...
Android 9.0 關機流程分析
極力推薦文章:歡迎收藏 Android 干貨分享 閱讀五分鐘,每日十點,和您一起終身學習,這里是程序員Android 本篇文章主要介紹 Android 開發中的部分知識點,通過閱讀本篇文章,您將收獲以 ...
Android 屏蔽Power鍵 Home鍵
Android 屏蔽Power鍵 Home鍵 標簽: androidpower鍵Home鍵PhoneWindowManagerframework 2014-04-18 17:22 1557人閱讀 評論 ...
【Android】Sensor框架Framework層解讀
Sensor整體架構 整體架構說明 黃色部分表示硬件,它要掛在I2C總線上 紅色部分表示驅動,驅動注冊到Kernel的Input Subsystem上,然后通過Event Device把Sensor數 ...
Android開發如何定制framework層服務
剛剛跨完年,新年第一篇文章,那么今天將對Android開發framework中間層的服務定制使用作個總結.首先我們先導入Android平臺源碼framework層的代碼到開發工具eclipse中,代碼 ...
隨機推薦
FZU 2105Digits Count(線段樹 + 成段更新)
Description Given N integers A={A[0],A[1],...,A[N-1]}. Here we have some operations: Operation 1:?AN ...
深度學習框架 Torch 7 問題筆記
深度學習框架 Torch 7 問題筆記 1. 嘗試第一個 CNN 的 torch版本, 代碼如下: -- We now have 5 steps left to do in training our ...
LPTHW 笨辦法學python 20章
本章節講述了,函數和文件的綜合操作. 分別 執行了.1.讀出文件所有內容,2.把文件重置至文件開頭.3.打印一行. 我在本節作了一個小小的改良,設置了一個全局變量,記錄當前應該輸入哪一行,如果執行過一 ...
[Windows] 批處理文件系統服務控制
在cmd下可有兩種方法打開,net和sc. net只能用于用于打開沒有被禁用的服務. 啟動:?net?start?服務名 停止:?net?stop?服務名 sc可打開被禁用的服務. sc?config ...
[Neural Networks] Momentum
一.目的 加快參數的收斂速度. 二.做法 另第t次的權重更新對第t+1次的權重更新造成影響. 從上式可看出,加入momentum后能夠保持權重的更新方向,同時加快收斂.通常alpha的取值為[0.7, ...
delphi 線程池基礎 TSimplePool
1. TSimpleThread 2. TSimpleList 3. 以1,2構成 TSimplePool 用法 先定義: TDoSomeThingThread=class(TSimpleThread ...
mysql 獲取一張表中, 另一張表不存在的數據
編寫sql語句中,經常需要編寫獲取一張數據表中不存在與另一張表的數據,相關編寫方法如下: 方法1: 使用not in ,效率低下,在數據較小的情況下可以采用如下編寫 SELECT * FROM a A ...
JAVA 的輸入與輸出流當中,什么時候該使用字符流?什么時候該使用字節流?
1. InputStream 和OutputStream,兩個是為字節流設計的,主要用來處理字節或二進制對象, 2. Reader和 Writer.兩個是為字符流(一個字符占兩個字節)設計的,主要用來 ...
mac電腦讀寫NTFS格式的移動硬盤命令
diskutil info /Volumes/SAMSUNG | grep UUID echo "UUID=38EBE5E4-016F-44B7-9D55-BB4AF6DC3E1D none ...
hihoCoder #1143 : 骨牌覆蓋問題·一
#1143 : 骨牌覆蓋問題·一 時間限制:10000ms 單點時限:1000ms 內存限制:256MB 描述 骨牌,一種古老的玩具.今天我們要研究的是骨牌的覆蓋問題:我們有一個2xN的長條形棋盤,然 ...
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android power 按键,Android Framework层Power键关机流程(一,Power长按键操作处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一张倾斜图片进行矫正 c++_专业性文章
- 下一篇: 5类主题词汇(5)