我需要从我的应用程序注销,如果它进入后台并在超过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);
}
}
}
答案 0 :(得分:0)
您可以将时间(System.currentTimeMillis
)存储在活动的onPause()
方法中(例如使用SharedPreferences)。在onResume
- Methode中,您可以检查此时间并记录1000 * 60 * 15毫秒结束的用户。
答案 1 :(得分:0)
您可以使用AlarmManager在15分钟内安排闹钟,然后启动闹钟时,您可以从应用中退出。然后,当您再次打开您的应用程序时,您必须确保取消当前警报,这样您就可以确保如果用户在15分钟内打开应用程序,则不会执行注销。你可以找到一个完整的例子here关于这个方法的好处是你的应用程序不能运行。
总结一下,对于复制和粘贴爱好者:
安排闹钟:
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);
}
答案 2 :(得分:0)
尝试以下代码
//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分钟的间隔后执行注销操作。
答案 3 :(得分:0)
尝试详细了解http://developer.android.com/training/basics/activity-lifecycle/index.html可用的活动生命周期。 您的应用程序将进入后台,这意味着您当前的活动将进入onpause()状态或onStop()。您需要在这些活动周期中进行编码。在此状态下,您可以调用警报管理器,它可以在给定时间执行特定任务,就像您在15分钟后启动应用程序一样