实现自动注销功能

Implemet Auto Logout Function

我需要每天下午 3 点从应用程序中注销用户。

我需要在每天下午 3 点调用注销 API。

我的Android版本是4.4.4。

我已经实现了这个功能 alarmManager.It 没有在准确的时间触发(有时它会延迟 1 分钟触发,有时延迟 15 分钟)

有没有办法解决这个问题。

下面的代码...

//设置自动退出的闹钟

private void CallAutoLogOut() {

boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent("myactionalarm"),PendingIntent.FLAG_NO_CREATE) != null);

Intent alaramIntent = new Intent("myactionalarm");
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, 15);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);
if (alarmUp)
{
Log.e("alaram", "Alarm is already active");
}else {
Log.e("alaram", "Alarm is set..!"+calendar.getTime());
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
// alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 2*60*1000, pendingIntent);

}

}

// 接收广播调用自动退出

@Override
public void onReceive(Context context, Intent intent) {
    this.con = context;
    RequestQueue requestQueue = Volley.newRequestQueue(context);

    Log.e("alaram", "just called reciver");
    if (intent.getAction() != null) {
        if (intent.getAction().equals("myactionalarm")) {
            Log.e("alaram", "onReceive: ----->" + intent);

            callLogoutApi(requestQueue);


        }
    }
}

您在 setInexactRepeating

时使用了警报管理器的重复警报功能

有了这个 API 当您的闹钟重复时,它永远不会在准确的时间完成,并且会根据可用的系统资源触发。这也比 EXACT 消耗更少的内存和能量。

如果你想在准确的时间进行并且是绝对必要的,你需要设置一个准确的闹钟,然后在该闹钟内设置一个新的闹钟以重复。

要精确计时,请使用 setExact()

alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

您的服务器是否需要在下午 3 点整触发它?否则,您可以执行手动策略,即使您的 API 未被触发,也可以在下午 3 点在本地自动注销。

此外,我确实相信,如果有人只是将他们的 Android 时钟调回某个时间,这样下午 3 点就不会出现并且你的 API 永远不会被解雇,那么这个策略很容易失败。