由于Android不活动,15分钟后自动从应用程序注销

时间:2017-09-12 06:19:39

标签: android

我想在我的android应用程序中进行会话管理。如果用户不活动或不与应用程序交互,我想从应用程序注销用户。我不知道什么时候开始服务。目前我在onResume()中启动它。我使用CountDownTimer在15分钟后自动注销。但这不起作用。是否有任何有效或有效的会话管理解决方案。

LogoutService

public class LogoutService extends Service {
    public static CountDownTimer timer;
    @Override
    public void onCreate(){
        // TODO Auto-generated method stub
        super.onCreate();
        timer = new CountDownTimer(5 * 60 * 1000, 1000) {
            public void onTick(long millisUntilFinished) {
                //Some code
                Log.v("LogoutService", "Service Started");
            }

            public void onFinish() {
                Log.v("LogoutService", "Call Logout by Service");
                // Code for Logout
                stopSelf();
            }
        };
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

MainActivity

@Override
        protected void onStop() {
            super.onStop();
            LogoutService.timer.cancel();
        }

    @Override
        protected void onResume() {
            super.onResume();
            startService(new Intent(this, LogoutService.class));
            LogoutService.timer.start();
        }

2 个答案:

答案 0 :(得分:0)

首先,我可以猜到为什么它不起作用的原因可能是因为这段代码。

 @Override
    protected void onStop() {
        super.onStop();
        LogoutService.timer.cancel();
    }

让我们假设如果触发了设备屏幕,那么onStop()会被触发,因此您的计时器将被取消,无需进一步检查。

取消onDestroy这样的时间。

 @Override
    protected void onDestroy() {
        super.onDestroy();
        LogoutService.timer.cancel();
    }

现在既然你问有没有更好的方法,你可以使用触摸事件

并在线程或计时器中启动计数器,如果计数器达到15分钟,则通过调用

关闭您的活动
 finish()

以下是检测onCreate()

上整个活动的onTouch事件的代码
   setContentView(R.id.main);
   View view = findViewById(R.id.main); 
    view.setOnTouchListener(new View.OnTouchListener() {

         @Override
          public boolean onTouch(View view,MotionEvent event) {

               nTouchCouter = 0; // Don't forget to reset the counter onTouch
               return true;

                       }
             });

答案 1 :(得分:0)

这对我有用:

private Handler handler;
private Runnable r;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       // Your code

 handler = new Handler();
        r = new Runnable() {
            Toast.makeText(MainActivity.this, "user is inactive from last 5 minutes", 
     Toast.LENGTH_SHORT).show();
           // Preform you action here
        };
        startHandler();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    stopHandler();
}

@Override
public void onUserInteraction() {
    super.onUserInteraction();
    stopHandler();
    startHandler();
}

public void stopHandler() {
    handler.removeCallbacks(r);
}

public void startHandler() {
    handler.postDelayed(r, 10000);
}