Android Framework:如何让 App 拿到Power key 值
Android app:如何让 App 拿到Power key 值
原文(有删改):https://blog.csdn.net/qq_37858386/article/details/103835664
介绍
默认机制:Power key 通常都是由 framework 自行的 处理的, app 无法拿到这个 key 值的。
修改
Framework
路径:frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java
PhoneWindowManager主要用于实现各种实体或虚拟按键处理。
修改interceptKeyBeforeQueueing方法,把case KeyEvent.KEYCODE_POWER部分做如下修改:
其中,
com.example.keyeventdemo是需要获取power事件app的包名:
case KeyEvent.KEYCODE_POWER: {
Log.d(TAG,"detect power key in special package, pass to user! "+KeyEvent.KEYCODE_POWER);
result &= ~ACTION_PASS_TO_USER;
// add-start
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
try{
if (activityManager.getRunningTasks(1).get(0).topActivity.getPackageName().equals("com.example.keyeventdemo")){
//Please reset the special package name.
result |= ACTION_PASS_TO_USER;
Log.d(TAG,"detect power key in special package, pass to user!");
}
}catch(NullPointerException e){
Log.d(TAG,"ingore a NullPointerException ..");
}
// add-end
// others code
}
app
三、实际测试ok,按下power键没有灭屏幕,app获取到该事件。
四、app测试代码
public class MainActivity extends AppCompat Activity {
private Textview key_result;
private String desc = "";
@0verride
protected void onCreate(Bundle savedInst anceSt ate) {
super.onCreate(savedInstanceState);
setCont entView(R.1ayout.activity_main);
key_result =(TextView) findViewById(R. id.key_result);
@0verride
public boolean onKeyDown(int keyCode,KeyEvent event) {
desc = String.format("%sphysical key coce is %i", desc, keyCode);
if (keyCode == KeyEvent.KEYCODE_BACK)
{
desc = String.format("%s,KEYCODE BACK",desc);
} else if (keyCode == KeyEvent.KEYCODE_MENU ) {
desc = String.format("%s,KEYCODE_MEN",desc);
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP);{
desc = String.format("%s, KEYCODE_VOLUME_UP", desc);
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWD){
desc = String.format("%s,KEYCODE_VOLUME_DOWN", desc);
}else if (keyCode == KeyEvent. KEYCODE_POWER){
desc = String.format("%s, KEYCODE_POWER", desc);
}else {
desc = String.format("%s, KEYCODE_VOLUME is unknown", desc);
}
desc = desc + "\n";
key_result.set Text (desc) ;
//返回true表示不再响应系统动作,返回false表示继续响应系统动作return true;
// return false:
}
}
}

Android Framework:如何让 App 拿到Power key 值的更多相关文章
- Android 如何让 app 自行处理 power key M
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发
掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...
- Android学习系列(37)--App调试内存泄露之Context篇(下)
接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...
- 北京联想招聘-Android Framework高级工程师(7-10年) 加入qq 群:220486180 或者直接在此 留言咨询
Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Resear ...
- 如何调试Android Framework?
Linus有一句名言广为人知:Read the fucking source code. 但其实,要深入理解某个软件.框架或者系统的工作原理,仅仅「看」代码是远远不够的.就拿Android Frame ...
- 解析android framework下利用app_process来调用java写的命令及示例
解析android framework下利用app_process来调用java写的命令及示例 在android SDK的framework/base/cmds目录下了,有不少目录,这些目的最终都是b ...
- Android Studio搭建系统App开发环境
一.前言 在Android的体系中开发普通app使用Android Studio这一利器会非常的方便.但是开发系统app可能就会有些吃力,不过经过一些配置仍然会 很简单.我们知道系统app因为涉及到一 ...
- [Android][Framework] 添加系统服务
新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己 ...
- [Android][Framework]裁剪SystemServer服务以及关闭SystemFeature
本文链接 http://wossoneri.github.io/2018/08/30/[Android][Framework]crop-SystemServer-and-SystemFeature/ ...
- Android Framework 简介
Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...
随机推荐
- Linux上OcenBase单机版部署及基本信息查询
OceanBase单机版部署可以通过在线和离线两种方式部署.在线部署可以通过yum源或者apt源部署,直接拉取官方源码即可.实际使用中,大部分环境连不了外网,本文介绍离线方式安装. 下载"O ...
- MacOS安装和使用标注软件“labelImg”教程
原文发布于:https://blog.zhaoxuan.site/archives/16.html: 第一时间获取最新文章请关注博客个人站:https://blog.zhaoxuan.site. 简介 ...
- WEB服务与NGINX(25)- LNMP架构-WEB集群部署phpmyadmin
目录 1 LNMP架构-WEB集群部署phpmyadmin 1.1 WEB集群架构需求分析 1.2 WEB集群架构环境 1.3 部署mariadb 1.4 部署web服务器nginx 1.5 部署re ...
- Ubuntu中安装OpenSSL
一.前期准备 1.1 压缩包下载 在安装openssl之前,我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可 ...
- three.js教程2-几何体BufferGeomety顶点
1.网格模型(三角形概念) 网格模型Mesh其实就一个一个三角形(面)拼接构成.使用使用网格模型Mesh渲染几何体geometry,就是几何体所有顶点坐标三个为一组,构成一个三角形,多组顶点构成多个三 ...
- 数据转换3-航拍的osgb格式数据转成3dtile格式
选择的是包含所有 osgb 文件夹的 Data 文件 文件添加成功之后,空间参考,零点坐标等会根据文件自动生成,需要更改点击设置选择即可 存储类型:选择"散列",如果没有注意到,C ...
- Java面试题:线程池内“闹情绪”的线程,怎么办?
在Java中,线程池中工作线程出现异常的时候,默认会把异常往外抛,同时这个工作线程会因为异常而销毁,我们需要自己去处理对应的异常,异常处理的方法有几种: 在传递的任务中去处理异常,对于每个提交到线程池 ...
- mac + docker+单击clickhouse+Dbeaver安装全套
一.保证docker安装成功 看下教程:https://www.runoob.com/docker/macos-docker-install.html 二.启动桌面版docker 三.下载clickh ...
- 用 C 语言开发一门编程语言 — 字符串与文件加载
目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...
- Chrome:用uBlacklist屏蔽CSDN搜索结果
CSDN现在广告满天飞,且很多博客需要先关注才能复制,非常令人无语.如果每次用Google搜索的时候都要加上"-csdn"选项,就非常麻烦.有没有更方便的办法呢?我们可以利用Chr ...