Android 如何让app自行处理power key
来源:互联网 发布:文件夹定时拷贝软件 编辑:程序博客网 时间:2024/05/22 21:16
Power key 通常都是由 framework 自行处理的,app 无法拿到这个 key 值。
如果想让某个 app 自行处理 power key
应该要怎么做呢?
1: 修改 phoneWindowManager.java 的 interceptKeyBeforeQueueing 方法,在 reference line 后加入下面这段代码
case KeyEvent.KEYCODE_POWER: { //reference line
result &= ~ACTION_PASS_TO_USER; //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 ..");
}
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; //原有代码
} //加入行
}
if(!((result & ACTION_PASS_TO_USER) == ACTION_PASS_TO_USER)){ //加入行
result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP; //原有代码
} //加入行
}
注意: 以上蓝色背景部分的内容需要替换为您预期要处理 power key 的 app 对应的 package name.
3.app重写onKeyDown()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
Log.e("xxx", "KeyEvent.KEYCODE_POWER = " + KeyEvent.KEYCODE_POWER+"" );
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.e("xxx", "onKeyUp = " + KeyEvent.KEYCODE_POWER+"" );
return super.onKeyUp(keyCode, event);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
Log.e("xxx", "KeyEvent.KEYCODE_POWER = " + KeyEvent.KEYCODE_POWER+"" );
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.e("xxx", "onKeyUp = " + KeyEvent.KEYCODE_POWER+"" );
return super.onKeyUp(keyCode, event);
}
0 0
- Android 如何让 app 自行处理 power key M
- Android 如何让app自行处理power key
- Android 如何让app自行处理power key
- Android 如何让 app 自行处理 home key
- Power key处理流程图
- Android让ListView自行滚动
- Android Power Key Message
- [Android]长按电源键(Power Key)的处理
- Android开发中 如何处理power键
- android long power key流程
- 分析Power key的处理流程
- 分析Power key的处理流程
- 分析Power key的处理流程
- 分析Power key的处理流程
- 分析Power key的处理流程
- 如何让android app适应不同分辨率
- Android 如何让你的App赚钱?
- Android如何让APP进程常驻内存?
- IDEA插件开发初体验之(GET/SET自动生成带模版注释插件的开发与使用)
- axis2 WebService的发布与调用
- 基于react+redux+webpack的前端框架
- 关于Databinding的使用
- 开发工具-Fiddler的介绍
- Android 如何让app自行处理power key
- 【error】LINK1123: failure during conversion to COFF: file invalid or corrupt
- jbpm部署流程定义到MySql报乱码解决方案
- Android 面试题总结之View(一)
- JavaScript 易错知识点整理
- jQuery基本过滤选择器
- org.json.JSONException: Value of type java.lang.String cannot be converted to JSON
- 记录下使用Glide加载圆形图和圆角图
- Value of type java.lang.String cannot be converted to JSONObject 错误解决