一: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中,代码 ...

随机推荐

参数命令化 防止Sql注入

1.先在数据库中完成储存过程 create proc usp_selectStudent ) as select * froom student where StudentName=@studentN ...

I.MX6 eMMC 添加分区

/********************************************************************************* * I.MX6 eMMC 添加分区 ...

【CSS】最全的CSS浏览器兼容问题

CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并 整理了一下.对于web2.0的过度,请尽量用xhtml ...

【开源项目3】Android快速开源框架--afinal

Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架.同时封装了android中的http框架,使其更加简单易用: 使用finalBitmap,无需考虑bitm ...

关于Eclipse的Save时的自定义操作

Eclipse中Save+S的时候会包含很多其他操作.例如代码格式化,自动导入或者删除jar包等等. 如果修改代码的时候不想让Eclipse做这些操作,有两种方法. 第一: 用一个文本编辑器打开这个文 ...

数学 ZJOI 2012 数列

#include #include #include using namespace std; ; st ...

Citrix 服务器虚拟化之十八 桌面虚拟化之部署MCS随机桌面池

Citrix 服务器虚拟化之十八  桌面虚拟化之部署MCS随机桌面池 完成桌面模版的制作后,可以开始虚拟桌面池的发布 说明: 环境基于实验十七 1.登录DC服务器创建一个组织单位名为Citrix,然后 ...

git配置ssh

$ git config --global user.name "yourname"$ git config --global user.email "youremail ...

MEF插件系统中通信机制的设计和实现

MEF插件系统中通信机制的设计和实现 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实现事件的注册和分发,但是,在插件系统中却不能这么简单的直接用已有的类来完成.一个插件本不包 ...

Spring自动化装配bean

1. 场景 用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入). 如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这 ...

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高工必备:说说从手机开机到APP启动FrameWork层的整体执行流程

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

  3. android app 渗透测试,android app渗透测试方法大全.pdf

    Android APP 渗透测试方法大全 by backlion 一.Android APP 渗透测试方法 1.测试环境 SDK : J a JDK , Android SDK. 工具: 7zip, ...

  4. android 通知灯 测试,Android灯光系统通知灯【转】

    标签: 一.通知灯应用程序的编写 1.首先实现一个按钮功能 xmlns:tools="http://schemas.android.com/tools" android:layou ...

  5. android服务器压力测试,Android压力测试Monkey工具

    最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...

  6. android 渠道包测试,Android快速批量多渠道包的“蛋生”

    对于安卓程序猿朋友来说,每当发布新版本的APP,均会分发到各大应用市场,比如腾讯应用宝,豌豆荚和360手机助手等.为了让程序猿同志们更好的区分不同的应用市场,掌握各市场APP发展状况,为了更多体现世界 ...

  7. android系统稳定性测试,Android的稳定性

    概述 Android的稳定性包含以下几个方面: 1.ANR 2.Crash 3.Tombstone 4.Freeze 5.黑屏 6.冻屏 #稳定性问题分析以及需要的相关log /data/anr/tr ...

  8. android 丢帧率测试,Android流畅度测试

    测试方法一:系统自带-开发者模式 实际上,为了方便开发者测试,安卓本身就内置了流畅度检测的功能.不过,这需要我们开启隐藏的开发者选项.如果你在用原生系统,那么开启开发者选项的方法很简单,进入到设置菜单 ...

  9. Android浏览器速度测试,Android平台浏览器网页加载速度对比评测

    参与测试的浏览器 手机上网已经渐渐成为人们的一种习惯,无论在等公交时.乘地铁时.吃饭等餐时,很多朋友都习惯掏出手机简单浏览一下微博.人人.新闻网站等页面.移动网络的确为我们带来了莫大的便利,但网速和稳 ...

最新文章

  1. Navicat for Oracle
  2. (70)内核重载 xp sp3 x86 单核
  3. ARM中 __IO的作用解析
  4. PHP的几种排序算法的比较
  5. 查询排序_MySQL使用UNION连接两个查询排序失效
  6. epoll为什么比select和poll效率更高
  7. mysql主从复制中间件_linux下mysql主从复制(第二篇读写分离) mycat 中间件
  8. Chromium+depot_tools
  9. Pillow图像处理
  10. 单片机c语言设计奥运五环,如何用C语言程序来设计奥运五环图案.doc
  11. linux网络延迟命令,2. Linux使用ping命令查看网络延迟
  12. 魅九网下载最新的android固件下载地址,iOS9固件下载地址一览 全设备下载地址...
  13. Launching unittests with arguments python -m unittest
  14. 为Python程序添加桌面快捷方式
  15. U盘读不出来的解决办法
  16. 开放银行赋能供应链金融,连接企业生态场景
  17. 活动星投票千人共读一本书网络评选微信的投票方式线上免费投票
  18. 大前端求人不如求己系列工具:如何PSD文件自动标注切图和真机预览
  19. FPM实现 Search UIBB 和 List UIBB数据交互
  20. C语言 Windows文件选择对话框

热门文章

  1. 删除u盘插拔记录linux,电脑u盘插拔记录_电脑u盘插拔时间记录
  2. vue 使用quill-editor富文本编辑框
  3. 无论你想发展的方向是什么,关注这些总没错!
  4. Amazon Studios预订获奖喜剧《了不起的麦瑟尔夫人》第四季
  5. 微信多开PC版微信,无需关闭已经打开的
  6. 超神学院德诺计算机,超神学院:扒一扒隐藏起来的人物,德诺星系的人有没有活下来的?...
  7. android 铃声设置文件夹
  8. 推荐技术微信群和QQ群
  9. 那些人生最重要的转折点
  10. Java中Thread类的start()和run()方法