Android app:如何让 App 拿到Power key 值
一、Power key 通常都是由 framework 自行的 处理的, app 无法拿到这个 key 值的。
二、要想获取POWER键,需要修改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;
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 ..");
}
return 1;
}
三、实际测试ok,按下power键没有灭屏幕,app获取到该事件。
四、app测试代码