我正在开发一款将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有进行任何操作,应用程序将显示一个屏幕保护程序,即应用程序的标志。
我的问题是,如何编写检测5分钟内无操作的代码?
我正在开发一款将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有进行任何操作,应用程序将显示一个屏幕保护程序,即应用程序的标志。
我的问题是,如何编写检测5分钟内无操作的代码?
这里有一个更好的解决方案......非常简单
我使用了以下倒计时计时器:
private long startTime = 15 * 60 * 1000; // 15 MINS IDLE TIME
private final long interval = 1 * 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countDownTimer = new MyCountDownTimer(startTime, interval);
}
@Override
public void onUserInteraction(){
super.onUserInteraction();
//Reset the timer on user interaction...
countDownTimer.cancel();
countDownTimer.start();
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
//DO WHATEVER YOU WANT HERE
}
@Override
public void onTick(long millisUntilFinished) {
}
}
干杯..........:)
Handler handler;
Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
r = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "user Is Idle from last 5 minutes",
Toast.LENGTH_SHORT).show();
}
};
startHandler();
}
@Override
public void onUserInteraction() {
// TODO Auto-generated method stub
super.onUserInteraction();
stopHandler();//stop first and then start
startHandler();
}
public void stopHandler() {
handler.removeCallbacks(r);
}
public void startHandler() {
handler.postDelayed(r, 5*60*1000);
}
所以在一个Activity中,你只需要像这样重写前面提到的方法:
@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
timestamp = System.getCurrentTimeMilis();
return false; // return false to indicate that the event hasn't been handled yet
}
dispatchKeyEvent和其他可以重写以确定用户活动的方法应该工作得相当类似。
如果您正在使用多个Activity,您可能需要创建一个扩展Activity的基类,并覆盖所有您想要处理的dispatchXXXEvent方法,然后将其用作所有Activity的基类。但是我猜您的实现细节可能有点超出了实际问题的范围 :)
关于不同计时器的可能性,您可以在这里找到有用的信息:在Android中安排定期任务
try with:
private void startCount(int time) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Add here the code for showing the fullscreenlogo
}
}, time);
}
然后,无论何时您想要开始计数,都应该添加:
startCount(time); // Replace time with 60*5*1000 for 5 mins
@Override
public void onPause() {
super.onPause();
startCount(time);
}