首页 > 解决方案 > AlarmManager 不会在每天凌晨 2 点设置闹钟

问题描述

我希望 AlarmManager 每天凌晨 2 点设置闹钟......所以setAlarm只有在有人第一次打开应用程序时才会调用下面的内容。我已经添加alarmManager.setRepeating,以便它每天发生。

public class AlarmUtil {

    public static void setAlarm(Context context) {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (alarmManager != null) {
            long start = System.currentTimeMillis();
            Intent in = new Intent("ALARM_RECEIVER");
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, in, PendingIntent.FLAG_CANCEL_CURRENT);
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.HOUR, 2);
            calendar.set(Calendar.AM_PM, Calendar.AM);
            DateFormat format = new SimpleDateFormat("MMMM dd , yyyy  HH:mm:ss", Locale.ENGLISH);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
        }
    }
 }

下面的课程是每天凌晨 2 点应该调用的内容,无论应用程序处于活动状态还是非活动状态。

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, AlarmService.class));
    }

但是我的问题是上面的 AlarmReceiver 每 30 秒被调用一次,或者有些随机发生,但发生了很多次,而我希望它每天只被调用一次。我不明白我哪里错了?

标签: androidalarmmanagerandroid-alarmsandroid-broadcastreceiver

解决方案


推荐阅读