长按按键后在抬起up后响应事件。短按键亮灭屏。
长按按键后在抬起up后响应事件 :
适用于长按触发没说长按多少秒,那么我们就在抬起的时候触发,如果说了具体时间,需要长按的过程就触发,就做个handler延迟
frameworks下base/services/core/java/com/android/server/policy/PhoneWindowManager.java
对应的键的case里
if(down){下加入计入初始时间
mDownTime = event.getEventTime();
这个mDownTime之前要记得定义
private long mDownTime;
在
if(event.getAction() == KeyEvent.ACTION_UP){
或者直接就是else{
加入判断
if(event.getEventTime() - mDownTime >= 1000){
就是超过一秒钟长按就是算能触发,然后执行相应事件就行
任意键短按亮灭屏,这里以camera键为例,短按亮灭屏,长按进入相机
frameworks下base/services/core/java/com/android/server/policy/PhoneWindowManager.java
亮屏:
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK,"bright");boolean isScreenOn = pm.isScreenOn();wl.acquire();wl.release();
可以判断当前是否亮屏,来取决到底亮还是灭
灭屏的方法用里面就有的
goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH,PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
其实这个方法
goToSleep(long eventTime, int reason, int flags) {
所以第二个参数其实也没啥用,就说下为啥
源码还有用到的是
goToSleep(event.getEventTime(),PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
所以这个reason是对的,所以可以改为
goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);
System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;
@param eventTime 时间
* @param reason 原因,Power键灭屏则是PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON
* @param flags 目前只有两个值:0和1(GO_TO_SLEEP_FLAG_NO_DOZE)
如果除了亮灭屏还有长按,那就不能放在down的判断下,down就记录一个时间就行
if(down){mDownTime = event.getEventTime();}
剩下的操作都放在up里面执行就行
if(event.getAction() == KeyEvent.ACTION_UP){if(!isScreenOn){
都放在down里的话,长按就得先息屏后调用了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
