一: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长按键操作处理)相关推荐

  1. android power键测试,Android Framework层Power键关机流程(一,Power长按键操作处理)...

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  2. Android开发如何定制framework层服务

    刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...

  3. Android Framework层Power键关机流程(二,关机流程)

    二,关机流程 从前一篇博文我们知道,当用户长按Power键时会弹出(关机.重启,飞行模式等选项)对话框,我们点击关机,则会弹出关机确认对话框.那么从选项对话框到关机确认对话框又是一个什么流程呢.下面我 ...

  4. 【Android N7.0】Framework层实现派发HOME按键到Application层的一种简单方案

    frameworks/base/core/java/android/view/WindowManager.java frameworks/base/services/core/java/com/and ...

  5. Android源码分析 - Framework层的Binder(客户端篇)

    开篇 本篇以aosp分支android-11.0.0_r25作为基础解析 我们在之前的文章中,从驱动层面分析了Binder是怎样工作的,但Binder驱动只涉及传输部分,待传输对象是怎么产生的呢,这就 ...

  6. Android高工必备:说说从手机开机到APP启动FrameWork层的整体执行流程

    引言 本文讲解从开机到app显示画面的流程,但不分析源码,如果想阅读源码请到参考文章中查阅. 纸上说来终觉浅,建议有时间的小伙伴去我的B站观看视频讲解:Android进阶:手机开机到APP启动中间Fr ...

  7. Android系统反编译FrameWork层虚拟定位方法

    首次发帖,如有不规范的地方还望多多包涵 起因是因为需要做模拟定位的功能,最终是过金融类app的定位 ,root.框架分分钟被砍死 迫于无奈,直接从操作系统入手,反正hook也不过是hook那几个系统里 ...

  8. 初识Android framework层

    Android系统的构成如下,从上到下依次是 Application应用层 Framework框架层 LIbrary系统库层 Linux内核层 关于Framework层: Android的Framew ...

  9. Win11系统禁止关机键关机的方法教学

    Win11系统禁止关机键关机的方法教学.在操作电脑的时候,有用户经常出现自己误触关键按键导致电脑关机的情况.对于这个情况,我们可以去开启电脑禁止关机按键关机的设置.这样就可以不用担心误触导致关机的问题 ...

最新文章

  1. python统计linux流量,通过Python进行MySQL表信息统计
  2. jsp的相对路径问题
  3. [MIPS汇编语言]对于数的输入和输出
  4. 如何知道网站的IP,然后利用IP登陆网站?
  5. Winform中实现ZedGraph新增自定义Y轴上下限、颜色、标题功能
  6. 在灾难发生之时,你在Facebook的社交定位或许能救你一命
  7. sql server driver for php,Microsoft SQL Server Driver for PHP
  8. 微信8.0自动发送炸弹python脚本
  9. 5款工具帮你一键快速图片去水印(附送复杂水印去除教程)
  10. 2018-11-3-如何使用-Telegram
  11. 外贸找客户软件工具-G-EXTRACTOR-谷歌商家
  12. 万网域名怎么做解析教程图解
  13. 实验记录 | somatic.pl运行1
  14. 边缘计算的下一场革命:1+12?
  15. 柔性电子:灵敏电阻,基于高定向,独立的碳纳米管阵列的柔性压力传感器
  16. Kylin(二)安装使用
  17. 4.1 -Springboot 编写http接口
  18. electron 主进程,和渲染进程的通信
  19. 零入门kubernetes网络实战-3->Underlay网络与Overlay网络总结
  20. walking机器人入门教程-视觉建图-rtabmap使用视觉建图和导航

热门文章

  1. 整理了二个基本的css库(高手请绕道)
  2. thinkphp如何增加session的过期时间
  3. linux命令 ps -ef 的含义
  4. git ssh拉取代码_阿里云搭建git服务器
  5. MySQL 之 索引
  6. 脚本启动显示查询频繁被服务器防御_面对CC攻击,该如何进行防御
  7. JavaScript中的循环
  8. 【Nginx】通过反向代理配置本地图床功能
  9. linux生产环境下安装anaconda总结
  10. obs可以装手机吗?_原神PC和手机数据互通吗 PC和手机可以一起玩吗