我希望在我的Android应用程序中看到用户不活动。如果用户没有执行任何活动,请说1分钟,那么应用程序应该在屏幕外显示它应该显示一个要求输入密码的对话框(之前存储在共享偏好中)。如果密码匹配活动应该重新开始。可以帮助我在这个我不明白从开始或搜索什么。或者有人可以提供一些链接吗?
答案 0 :(得分:1)
将BroadcastReceiver
与Intent.ACTION_SCREEN_OFF
一起使用,以识别应用中的用户不活动状态。您可以使用Intent.ACTION_SCREEN_ON
来处理屏幕情况。
答案 1 :(得分:1)
private CountDownTimer mCountDown = new CountDownTimer(your desire time here, same as first param)
{
@Override
public void onTick(long millisUntilFinished)
{
}
@Override
public void onFinish()
{
//show your dialog here
}
};
@Override
protected void onResume()
{
super.onResume();
mCountDown.start();
}
@Override
protected void onPause()
{
super.onPause();
mCountDown.cancel();
}
@Override
public void onUserInteraction()
{
super.onUserInteraction();
// user interact cancel the timer and restart to countdown to next interaction
mCountDown.cancel();
mCountDown.start();
}
使用上面的代码,将捕获所有用户交互。当用户按HOME或SEARCH离开您的应用程序时,当他们回来时,您想要做的是另一个故事。此外,当不会调用进入onUserInteraction的手机时,如果您想在用户从通话中退出并且时间到期后显示对话框,那么它会变得更复杂。您必须覆盖onKeyDown并设置一个标记,以便知道您的应用因电话呼入而暂停的时间。
答案 2 :(得分:1)
在我的Serach期间,我找到了很多答案,但这是我得到的最佳答案。但是这个代码的限制是它只适用于不适用于整个应用程序的活动。 以this为参考。
myPtr = foo(myPtr);
例如,如果您使用8000,则任务将在用户不活动8秒后完成。
答案 3 :(得分:1)
在您的BaseActivity中,覆盖dispatchTouchEvent并返回false。
long lastTimeStamp;
@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
if(lastTimeStamp + 5*60*1000 < System.getCurrentTimeMilis()) {
//your lasttimestamp was 5 mins ago. Expire user session.
}
lastTimeStamp = System.getCurrentTimeMilis();
return false; // return false to indicate that the event hasn't been handled yet
}
答案 4 :(得分:0)
我认为这可以帮到你
public void onUserInteraction()
在API级别3中添加 每当将密钥,触摸或轨迹球事件分派给活动时调用。如果您希望知道用户在您的活动运行时以某种方式与设备进行了互动,请实施此方法。
http://developer.android.com/reference/android/app/Activity.html#onUserInteraction()