4

Androidアプリでユーザーが非アクティブになっていないかどうかを確認したいユーザーが1分間などのアクティビティを実行しない場合、アプリはオフスクリーンになり、パスワードを要求するダイアログボックスが表示されます(以前はsharedpreferencesに保存されていました)。パスワードが活動を再開する必要があります。誰かが私を助けてくれますか?私が理解していないのは、何を始めるべきか、何を検索するべきか、または誰かが私にいくつかのリンクを提供してこれを達成することができますか?

4

5 に答える 5

2

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.

于 2016-03-23T07:17:42.583 に答える
1

BroadcastReceiverwith を使用しIntent.ACTION_SCREEN_OFFて、アプリでのユーザーの非アクティブを識別します。Intent.ACTION_SCREEN_ON状況に応じて画面を処理するために使用できます。

于 2013-03-25T08:31:33.793 に答える
1

これはあなたを助けることができると思います

public void onUserInteraction()

APIレベル3で追加されました。キー、タッチ、またはトラックボールのイベントがアクティビティにディスパッチされるたびに呼び出されます。アクティビティの実行中にユーザーが何らかの方法でデバイスを操作したことを知りたい場合は、このメソッドを実装します。

http://developer.android.com/reference/android/app/Activity.html#onUserInteraction()

于 2013-03-25T09:18:50.590 に答える
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をオーバーライドしてフラグを設定する必要があります。

于 2013-03-25T17:38:17.927 に答える
1

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
}
于 2017-07-13T09:09:48.277 に答える