Android app:如何让 App 拿到Power key 值

                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;
}

Android app:如何让 App 拿到Power key 值_第1张图片

三、实际测试ok,按下power键没有灭屏幕,app获取到该事件。Android app:如何让 App 拿到Power key 值_第2张图片

四、app测试代码

Android app:如何让 App 拿到Power key 值_第3张图片

 

你可能感兴趣的:(Android,App,Develop)