Androidアプリでユーザーが非アクティブになっていないかどうかを確認したいユーザーが1分間などのアクティビティを実行しない場合、アプリはオフスクリーンになり、パスワードを要求するダイアログボックスが表示されます(以前はsharedpreferencesに保存されていました)。パスワードが活動を再開する必要があります。誰かが私を助けてくれますか?私が理解していないのは、何を始めるべきか、何を検索するべきか、または誰かが私にいくつかのリンクを提供してこれを達成することができますか?
5 に答える
During my Serach I found a lot of answers but this is the best answer I got. But limitation of this code is that it works only for activity not for whole application. Take this as a reference.
myHandler = new Handler();
myRunnable = new Runnable() {
@Override
public void run() {
//task to do if user is inactive
}
};
@Override
public void onUserInteraction() {
super.onUserInteraction();
myHandler.removeCallbacks(myRunnable);
myHandler.postDelayed(serviceRunnable, /*time in milliseconds for user inactivity*/);
}
for e.g you used 8000, the task will be done after 8 seconds of user inactivity.
BroadcastReceiver
with を使用しIntent.ACTION_SCREEN_OFF
て、アプリでのユーザーの非アクティブを識別します。Intent.ACTION_SCREEN_ON
状況に応じて画面を処理するために使用できます。
これはあなたを助けることができると思います
public void onUserInteraction()
APIレベル3で追加されました。キー、タッチ、またはトラックボールのイベントがアクティビティにディスパッチされるたびに呼び出されます。アクティビティの実行中にユーザーが何らかの方法でデバイスを操作したことを知りたい場合は、このメソッドを実装します。
http://developer.android.com/reference/android/app/Activity.html#onUserInteraction()
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をオーバーライドしてフラグを設定する必要があります。
In your BaseActivity, override dispatchTouchEvent and return 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
}