如果应用程序在后台运行15分钟,Android将注销



如果应用程序进入后台并在超过15分钟后恢复,我需要从应用程序注销。

请参阅提供的解决方案实施后的代码

public class BaseActivity extends Activity {
    BaseActivity context;
    private AlarmManager alarmMgr;
    private PendingIntent alarmIntent;
    BaseActivity() {
        context = this;
    }
    @Override
    protected void onStart() {
        super.onStart();
        if (alarmMgr != null) {
            alarmMgr.cancel(alarmIntent);
        }
    }
    @Override
    protected void onStop() {
        super.onStop();
        alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(BaseActivity.this, SampleBootReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1 * 30 * 1000, alarmIntent); // 15
    }
    class SampleBootReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "alarm", Toast.LENGTH_SHORT).show();
            Intent intent_login = new Intent(context, SignIn.class);
            intent_login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent_login);
            overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
        }
    }
}

您可以将时间(System.currentTimeMillis)存储在活动的onPause()方法中(例如使用SharedPreferences)。在onResume方法中,您可以检查此时间并记录用户是否超过1000*60*15毫秒。

您可以使用AlarmManager在15分钟内安排警报,然后在警报启动时,您可以从应用程序中注销。然后,当你再次打开你的应用程序时,你必须确保你取消了当前的警报,这样你就可以确保,如果用户在15分钟内打开应用程序,就不会执行注销。你可以在这里找到一个完整的例子。这个方法的优点是你的应用程序不能运行。

总结,对于副本&粘贴爱好者:

安排报警:

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() +
    15 * 60 * 1000, alarmIntent); // 15 minutes

您的BroadcastReceiver将从您的系统中注销:

public class SampleBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // LOGOUT
    }
}

取消退出警报:

if (alarmMgr!= null) {
    alarmMgr.cancel(alarmIntent);
}

尝试以下代码

//Class level variable 
private boolean inBackground = false;
@Override
public void onResume()
{
     inBackground = false;
}

@Override 
public void onPause()
{
    inBackground = true;
    new CountDownTimer( 900000 , 1000 ) 
    {
         public void onTick(long millisUntilFinished) {}
         public void onFinish() 
         {
             if ( inBackground )
             {
                  // code to logout
             }
         }
    }.start();
}

无论何时您的应用程序进入后台,默认控件都将使用onPause()方法。这里我使用了CountDownTimer,它将在15分钟的间隔后执行注销操作。

尝试了解有关活动生命周期的更多信息http://developer.android.com/training/basics/activity-lifecycle/index.html。你的应用程序将进入后台,这意味着你当前的活动将进入onpause()状态或onStop()状态。您需要在这些活动周期中进行编码。在这种状态下,您可以调用报警管理器,该管理器可以在给定的时间执行特定任务,就像在您的情况下,在15分钟后启动应用程序一样。

相关内容

  • 没有找到相关文章

最新更新