Android 如何在特定APP或活动中屏蔽POWER键操作
Android 中默认设置了Power键来在屏幕开启时关闭屏幕,屏幕熄灭时点亮屏幕,但是如果我们在一些APP或者活动中不想使用Android提供的Power键功能要怎么做呢?
很简单,我们只要到Android的源码下找到frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java这个类。
他的内部有两个方法值得我们关注。
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags)
public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags)
这两个方法,一个是在按键事件加入队列前,一个是分发前处理,当用户按下按键后先执行第一个再执行第二个方法,那么我们就可以在这两个方法中任选一个在内部对POWER键的处理事件进行修改。
首先我们要获取到按键目前所处的活动,
private String getTopActivity() {
String className = null;
ActivityManager mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> list = mActivityManager.getRunningTasks(1);
if (!list.isEmpty() && list.get(0) != null && list.get(0).topActivity != null) {
className = list.get(0).topActivity.getClassName();
}
return className;
}
获得类名后我们就可以在特定的活动处理POWER键了。
case KeyEvent.KEYCODE_POWER: {
......
if (getTopActivity() !=null
&& getTopActivity().getClassName().equals("com.sprd.validationtools.itemstest.KeyTestActivity")
&& isScreenOn()) {
break
}
......
}
break;
}
如上的例子就是在KeyTestActivity这个类中处理POWER