如何在Android应用程序中每天的特定时间提供自动注销?

时间:2014-10-16 05:30:19

标签: android

我的应用程序有一个登录工具,通过在共享首选项中存储布尔值来维护登录用户的会话。

我希望应用程序在晚上12点自动注销,无论设备是否空闲。因此,下次用户打开应用程序时,他会获得登录页面并且计时器设置为自动注册晚。 我如何实现这一目标?我在哪里可以设置每天自动注销的计时器??

请帮忙!在此先感谢

3 个答案:

答案 0 :(得分:1)

您可以使用AlarmManager类自动注销会话。这是登录后应该调用的方法。

private void callAutoLogout() {
    Intent alaramIntent = new Intent(LoginActivity.this, BootCompletedIntentReceiver.class);
    alaramIntent.setAction("LogOutAction");
    Log.e("MethodCall","AutoLogOutCall");
    alaramIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alaramIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 19);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 0);
    AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);

    Log.e("Logout", "Auto Logout set at..!" + calendar.getTime());
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

}

然后将在19.59触发BootCompletedIntentReceiver广播接收器。您可以在广播接收器中编写您的操作。

public class BootCompletedIntentReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(final Context context, Intent intent)
    {

        if("LogOutAction".equals(intent.getAction())){

            Log.e("LogOutAuto", intent.getAction());
            Toast.makeText(context, "Logout Action", Toast.LENGTH_SHORT).show();
            //Do your action
        }
    }
}

答案 1 :(得分:0)

这是你使用AlarmManager的方法,你需要做的就是创建一个总是在午夜之前触发的重复警报,

按照这个,

  1. 创建广播接收器,注册接收具有动作的意图,如ACTION_CLEAR_SESSION
  2. 注册boradcast类型的待处理意图,使用警报管理器定位您的接收器
  3. 将重复模式设置为每日,并在午夜之前设置触发时间
  4. 一旦你收到了播放,请清除你的会话。
  5. here是链接,只是为了详细信息

    否则,只要在午夜后打开您的应用程序,只需重置所有内容。

答案 2 :(得分:-1)

我认为你不需要在晚上12点进行注销。当应用程序打开时,只需检查12 o时钟是否已经过,然后触发注销然后转到登录活动。这更容易实现和测试。