通常我们在构建项目的时候,会让所有Activity继承一个基类BaseActivity,以方便对Activity进行管理,所以我们只需要在BaseActivity中进行操作近可以。由于Android事件传递的机制,所有事件都是由外向内传递的,所以,我们在BaseActivity中复写dispatchTouchEvent和dispatchKeyEvent方法,在这两个方法中进行操作就可以达到所需要的效果。
以下是判断30秒无操作的代码:
private Handler myHandler = new Handler();
private Runnable myRunnable = new Runnable(){
@Override
public void run() {
//TODO 30s无操作
}
};
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
myHandler.removeCallbacks(myRunnable);
break;
case MotionEvent.ACTION_CANCEL:
myHandler.postDelayed(myRunnable,30000);
break;
case MotionEvent.ACTION_UP:
myHandler.postDelayed(myRunnable,30000);
break;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
switch (event.getAction()){
case KeyEvent.ACTION_DOWN:
myHandler.removeCallbacks(myRunnable);
break;
case KeyEvent.ACTION_UP:
myHandler.postDelayed(myRunnable,30000);
break;
}
return super.dispatchKeyEvent(event);
}