【问题标题】:Alarm Manager is repeating more than once a day when using AlarmManager.INTERVAL_DAY使用 AlarmManager.INTERVAL_DAY 时,警报管理器每天重复多次
【发布时间】:2021-03-31 19:59:15
【问题描述】:

MainActivity.java

Intent intent = new Intent(this, AlarmReceiver24.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,1);
calendar.set(Calendar.MINUTE, 50);
calendar.set(Calendar.SECOND, 0);
String time= String.valueOf(calendar.getTime());
Log.i("Time:",time);
//repeat alarm every 24hours
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, alarmIntent);

AlarmReceiver 类

public class AlarmReceiver24 extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
        reference.child("Total").setValue(0);
        Toast.makeText(context, "Total Reset", Toast.LENGTH_SHORT).show();

    }
}

Android 清单

<receiver android:name=".AlarmReceiver24"/>

我希望代码每天在午夜 12:00:00 运行一次,但即使在使用 AlarmManager.INTERVAL_DAY 之后它也会一次又一次地触发。我不知道我做错了什么。

【问题讨论】:

    标签: java android


    【解决方案1】:

    每次打开MainActivity 时,它都会创建一个新的PendingIntent

    当您启动MainActivity 时,您应该remove 所有之前安排的警报。

    还有

    calendar.set(Calendar.HOUR_OF_DAY, 1);
    calendar.set(Calendar.MINUTE, 50);
    calendar.set(Calendar.SECOND, 0);
    

    不是午夜。

    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    

    是午夜

    【讨论】:

    • 如果我取消挂起的意图,那么它根本不会调用警报,我需要在哪里指定 cancel() 方法
    • 每次打开警报时创建警报是一种床解决方案。检查this一个。
    【解决方案2】:

    警报是在过去设置的,所以添加了这个条件并解决了

    if(calendar.before(Calendar.getInstance()))
                calendar.add(Calendar.DATE,1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多