Android 组合键
电源键 + 音量上键 长按实现关机功能 Android 9.0
- 1 组合键关机实现
- 1.1 添加必要参数
- 1.1 添加 handler 信息
- 1.3 电源键 DOWN处理
- 1.4 电源键 UP 处理
- 1.5 interceptCombinationShutdownChord 方法实现
- 1.6 cancelPendingShutDownChordAction
- 1.7 interceptKeyBeforeDispatching
- 1.8 音量上键 DOWN/UP 处理
主要涉及修改的文件是
/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
其中 interceptKeyBeforeQueueing 对按键事件进行拦截处理
1 组合键关机实现
1.1 添加必要参数
//控制组合键的间隔时长
private static final long COMBINATION_KEY_SHUTDOWN__DELAY_MILLIS = 1000;private boolean mShutDownChordVolumeUpKeyTriggered;
private long mShutDownChordVolumeUpKeyTime;
private boolean mShutDownChordVolumeUpKeyConsumed;private boolean mShutDownChordPowerKeyTriggered;
private long mShutDownChordPowerKeyTime;//定义延时发送的信息
private static final int MSG_POWER_VOLUME_COMBINATION_PRESS = 31;
1.1 添加 handler 信息
case MSG_POWER_VOLUME_COMBINATION_PRESS:if (mShutDownChordPowerKeyTriggered && mShutDownChordVolumeUpKeyTriggered) {// Intent intent1 = new Intent("android.intent.action.MAIN");// intent1.setClassName("com.android.factorytest","com.android.factorytest.framework.FactoryTestActivity");// intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// mContext.startActivity(intent1);mPowerKeyHandled = true;performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);mWindowManagerFuncs.shutdown(false);}break;
1.3 电源键 DOWN处理
private void interceptPowerKeyDown(KeyEvent event, boolean interactive) {+ mShutDownChordPowerKeyTriggered = true;
+ mShutDownChordPowerKeyTime = event.getDownTime();
1.4 电源键 UP 处理
private void interceptPowerKeyUp(KeyEvent event, boolean interactive, boolean canceled) {final boolean handled = canceled || mPowerKeyHandled;mScreenshotChordPowerKeyTriggered = false;
+ mShutDownChordPowerKeyTriggered = false;cancelPendingScreenshotChordAction();cancelPendingPowerKeyAction();
+ cancelPendingShutDownChordAction();
1.5 interceptCombinationShutdownChord 方法实现
+ private void interceptCombinationShutdownChord() {+ if (mShutDownChordPowerKeyTriggered && mShutDownChordVolumeUpKeyTriggered && !mScreenshotChordVolumeDownKeyTriggered) {+ final long now = SystemClock.uptimeMillis();
+ if (now <= mShutDownChordVolumeUpKeyTime + COMBINATION_KEY_SHUTDOWN__DELAY_MILLIS
+ && now <= mShutDownChordPowerKeyTime
+ + COMBINATION_KEY_SHUTDOWN__DELAY_MILLIS) {+ mShutDownChordVolumeUpKeyConsumed = true;
+ cancelPendingPowerKeyAction();
+ Message msg = mHandler.obtainMessage(MSG_POWER_VOLUME_COMBINATION_PRESS);
+ mHandler.sendMessageDelayed(msg,5000);
+ }
+ }
+ }
+
1.6 cancelPendingShutDownChordAction
+ private void cancelPendingShutDownChordAction() {//从队列中移除
+ mHandler.removeMessages(MSG_POWER_VOLUME_COMBINATION_PRESS);
+ }
+
1.7 interceptKeyBeforeDispatching
@Overridepublic long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {...
+ if ((flags & KeyEvent.FLAG_FALLBACK) == 0) {+ if (mShutDownChordVolumeUpKeyTriggered && !mShutDownChordPowerKeyTriggered) {+ final long now = SystemClock.uptimeMillis();
+ final long timeoutTime = mShutDownChordVolumeUpKeyTime
+ + COMBINATION_KEY_SHUTDOWN__DELAY_MILLIS;
+ if (now <timeoutTime) {+ return timeoutTime - now;
+ }
+ }
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mShutDownChordVolumeUpKeyConsumed) {+ if (!down) {+ mShutDownChordVolumeUpKeyConsumed = false;
+ }
+ return -1;
+ }
+ }
+
1.8 音量上键 DOWN/UP 处理
@Overridepublic int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {......interceptAccessibilityShortcutChord();interceptRingerToggleChord();}
+ mShutDownChordVolumeUpKeyTime = event.getDownTime();
+ mShutDownChordVolumeUpKeyTriggered = true;
+ mShutDownChordVolumeUpKeyConsumed = false;
+ interceptCombinationShutdownChord();} else {mA11yShortcutChordVolumeUpKeyTriggered = false;
+ mShutDownChordVolumeUpKeyTriggered = false;cancelPendingScreenshotChordAction();cancelPendingAccessibilityShortcutAction();cancelPendingRingerToggleChordAction();
+ cancelPendingShutDownChordAction();}}
Android 组合键相关推荐
- android组合键截图原理,三星安卓手机怎么截图组合键 三星安卓手机截图组合键步骤...
三星安卓手机因其综合性价比高的优势,在智能手机市场的份额非常大.所以,很多用户对三星安卓手机的一些功能都非常熟悉,比如:三星手机也有手机截图组合键,不过,三星拥有4种的组合键,不知道大家是否都了解,这 ...
- Android 组合键的监听
监听遥控器的左键和右键,当连续按下左左右右后,弹出Toast private long liftTime = 0;private long rightTime = 0;int leftCount = ...
- android 9.0 10.0 去掉音量键+Power键组合键的屏幕截图功能
1.概述 在10.0的系统中由WindowManagerService这个系统服务来循环读取窗口获取的消息(包括按下,弹起,双击,单击等)然后分发到各个类接收处理这些消息,在这个过程中PhoneWin ...
- Android 遥控器组合键的处理
最近在做遥控器开发中,需要处理两个按键一起按时的组合键的处理,下面做个笔记 1.定义组合键处理类 import android.content.Context; import android.util ...
- 在Android系统中添加组合键快捷启动功能
启动系统特定功能的组合键的判断应该在系统分发按键消息前处理, 这样从系统运行 的角度来说成本最低. 添加组合键处理需要先搞清楚按键消息在framework中采集 和分发子系统的工作流程, 虽然有and ...
- android 自定义组合键,Android组合按键功能定制(Framework)
Android组合按键功能定制(Framework) 涉及文件 alps/frameworks/base/services/core/java/com/android/server/policy/Ph ...
- android组合按键截屏,三星安卓手机截图组合键图文汇总(4种)
三星安卓手机因其综合性价比高的优势,在智能手机市场的份额非常大.所以,很多用户对三星安卓手机的一些功能都非常熟悉,比如:三星手机也有手机截图组合键,不过,三星拥有4种的组合键,不知道大家是否都了解,这 ...
- Android TV热键(快捷键、组合键)实现
TV上一些特殊的功能入口.串口打印开关.adb调试开关.部分菜单的显示隐藏等都可以通过热键来控制. 一般组合键选用某个功能键+一串数字即可,我们可以将其封装成工具类,这里快捷键,我使用F1和几个数字键 ...
- Android:TV设置遥控器组合键
这个其实很简单,就是获取用户的按键操作,按一次,我放到ArrayList,点击菜单的时候,我比对一下顺序是否正确 以下组合键顺序,上 --> 下 --> 左 --> 右 ...
最新文章
- API测试工具SoapUI Postman对比分析
- 时光机穿梭---删除文件
- python列表的索引算法_Python-确定列表是否对称的算法
- 三年经验前端社招——腾讯微保
- 第二阶段--个人冲刺--第十天
- 【TeeChart .NET教程】(七)使用函数
- mysql多数据源_egg-mysql配置多数据源
- 当前用户安装anaconda,不需要sudo权限
- 《深入理解分布式事务》第二章 MySQL 事务的实现原理
- 【C++】在控制台上跳极乐净土-easyX简单音乐及动画
- 计算机应用技术实验教程 网页制作,HtmlExperiment网页制作基础教程
- Python123 练习1
- UE4----GC(垃圾回收)
- HTML使用样式格式化文档
- 初步使用计算机教学设计,【教资笔试——科目三】信息技术教学设计范例
- python cv2读取图片后进行通道变换以及PIL阅读图像的通道转换
- 水木清华BBS各版面进版画面留念
- 特斯拉与宁波旭升 EDI项目案例
- sah服务器怎么修改vim,vim 编辑器(修改/etc/vim/vimrc即可)
- Mybatis-Plus动态表名插件实现数据库分表查询