Android让自己的App捕获处理系统按键Home Key和Power Key

Android中的Home Key,Power Key默认都是由系统的Framework来响应,如果想让自己的应用捕获响应,该怎么做呢?

Home Key比较简单,不涉及系统源码修改:

1. 在此 app 的 main Activity 的 onCreate 方法中加入如下这行:

<span style="font-size:14px;">getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);</span>

2. 重写此 main Activity 的 onKeyDown() 方法, 实现 home key 的处理部分, 并最终

return true;

Power Key稍微麻烦一些,要修改源码:

1: 修改 phoneWindowManager.java 的 interceptKeyBeforeQueueing 方法,在 reference line 后加入下面这段代码

case KeyEvent.KEYCODE_POWER: { //reference line
result &= ~ACTION_PASS_TO_USER; //reference line
// add begin
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
try{
if (activityManager.getRunningTasks(1).get(0).topActivity.getPackageName().equals("
your_special_package_name")){
//Please reset the special package name.
result |= ACTION_PASS_TO_USER;
Xlog.d(TAG,"detect power key in special package, pass to user!")
}
}catch(NullPointerException e){
Xlog.d(TAG,"ingore a NullPointerException ..");
}
//add end

2: 同样在此分支内, 找到 else 语句段, 并找到如下位置加入

if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) { //参考行
if(!((result
& ACTION_PASS_TO_USER) == ACTION_PASS_TO_USER)){ //加入行
result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP; //原有代码
}
}
//加入行

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui

时间: 2024-10-04 22:36:25

Android让自己的App捕获处理系统按键Home Key和Power Key的相关文章

android 定时短信app之时间选择器(一)

DatePicker类图 主要方法 public void init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener) 类 TimePicker类图 setOnTimeChangedListener public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTime

Android Studio上Session &#39;app&#39;: Error Installing APK错误解决方案

我在使用Android Studio的时候,使用自己的魅族(M5 Note)真机调试,运行不成功,提示下面图片中的错误(Session 'app':Error Installing APK). 再经过测试过好几种网上的方法之后,特记录如下,望以后大家少走弯路,希望可以帮助到大家. 可能不同的人使用到的方法都会是下面的不同的方法: 1)连接手机之后,会有显示手机的SDK型号以及API的版本,显示我自己的是魅族M5 Note(Android 6,API23),在我的手机上安装不上,刚开始有人说魅族手

基于Android 4.4 开发的多窗体系统 开放源代码

Hi, 这是我基于Android 4.4开发的多窗体系统,还有非常多不足,还请多多不吝赐教啊,代码已经所有开源. 视频地址 源代码地址 Done: 1. APP以窗体化显示 在 PhoneWindowManager::layoutWindowLw() 中通过packageName过滤,使指定的APP以非全屏尺寸显示,由于一个APP一般是以一个task为单位,显示多个activity,因此採用packageName过滤的方法. 2. 多个APP同一时候处于 onResume 状态 改动AMS中通知

android客户端应用(native app)适配测试自动化 东海陈光剑 2014年5月5日 0:39:04

未命名 android客户端应用(native app)适配测试自动化 东海陈光剑 2014年5月5日 0:39:04 http://10.125.1.58:88/report.html?run_stamp=20140428054354&min=3&sec=214 <!doctype html><html><head>    <meta charset="UTF-8">    <title>适配测试报告<

Android开发环境的发展以及重装系统之后在myeclipse重配Android开发环境。

android的开发环境早期要自己去去官网下SDK,ADT,AVD等.不仅在一开始要面临国内防火墙的阻拦,四处奔波之后都下载好了,还得自己Linked,可谓困难重重.随着android开发的火热,上面那些基本随处都可以下到了,而且随着众多优秀的开发软件的完善,现在进行android开发环境的配置已经很简单了.就举我自己用的myeclipse来说,就可轻松将这些linked在一起,完全不用我们去写Linked文件. 这里我就不从头一步步介绍如何安装Myeclipse已以及上面的SDK和ADT如何下

Android调用相册拍照控件实现系统控件缩放切割图片

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.ByteArrayOutputStream;import java.io.File;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Ur

爱加密进行专业Android加固,保护移动App应用安全!

回首2013年,你收到最多的短信可能不是亲朋好友发来的,而是各种广告带来的问候;你刚买了新房子,却收到房东的催房租短信,你淘宝上买了件衣服,却发现钱付给了游戏点卡公司.....垃圾短信.诈骗短信.诈骗电话.手机病毒等各类问题在2013年集中爆发,骗子们似乎对我们的信息了如指掌,那么我们的信息到底是怎样被泄露的呢? 最为常见的泄露原因就是手机病毒,不法分子通过二次打包,把病毒置于热门Andriod APP当中,用户下载安装这些被内置病毒的APP,手机就被病毒感染了,这些病毒会窃取用户通讯录.短信电

基于Android 4.4 开发的多窗口系统 开放源码

Hi, 这是我基于Android 4.4开发的多窗口系统,还有很多不足,还请多多指教啊,代码已经全部开源. 视频地址 源码地址 Done: 1. APP以窗口化显示 在 PhoneWindowManager::layoutWindowLw() 中通过packageName过滤,使指定的APP以非全屏尺寸显示,因为一个APP通常是以一个task为单位,显示多个activity,因此采用packageName过滤的方法. 2. 多个APP同时处于 onResume 状态 修改AMS中通知onPaus

Android开发之解决APP启动白屏或者黑屏闪现的问题

在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下.解决一下.这不,万能的网络还是非常有用的. 在这里总结一下. (参考及转载:http://www.2cto.com/kf/201409/339293.html) 欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式an