实现自动注销功能

时间:2017-09-11 10:27:41

标签: android android-fragments alarmmanager

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

我需要每天下午3点拨打登出API。

我的Android版本是4.4.4。

我已经用alarmManager实现了这个功能。它没有在准确的时间触发(有时触发延迟1分钟n有时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);


        }
    }
}

1 个答案:

答案 0 :(得分:2)

执行variations.color

时,您正在使用Alarm Manager的重复闹钟功能

使用此API时,您的闹钟将重复出现,它将永远不会在完全时间完成,并将根据可用的系统资源进行设置。此外,这与EXACT一样耗费更少的内存和能源。

如果您想在确定的时间进行并且绝对必要,您需要设置一个确切的警报,然后在该警报内设置一个新警报以进行重复。

要准确地使用setInexactRepeating

setExact()

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

此外,我确实认为,如果有人只是将Android时钟切换回一段时间,以便不会发生3PM并且您的API永远不会被解雇,那么此策略很容易失败。