重复报警每日错误

Repeat alarm daily error

我在 Android 中遇到 AlarmManager 问题。我需要每天在 9:00 AM 重复闹钟,为此我有下一个代码:

主 Activity 创建

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setAlarm();
}

设置报警方法

private void setAlarm() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);

    Intent receiver = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(ALARM_SERVICE);

    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

}

报警接收器

public class AlarmReceiver extends BroadcastReceiver {

int MID;

@Override
public void onReceive(Context context, Intent intent) {
    long when = System.currentTimeMillis();
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notificationIntent = new Intent(context, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
            context).setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("title")
            .setContentText("example").setSound(alarmSound)
            .setAutoCancel(true).setWhen(when)
            .setContentIntent(pendingIntent)
            .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
    notificationManager.notify(MID, mNotifyBuilder.build());
    MID++;

}

}

使用此代码,闹钟每天上午 9 点工作,但我的问题是,当我打开应用程序时,会出现通知。我打开应用程序的所有时间都在发生。

如果应用关闭,等到上午 9 点,也会出现通知。

我只想每天早上 9 点出现,而不是每次我打开应用程序时出现。

我该怎么办?

谢谢你

尝试设置下一个上午 9 点的闹钟

calendar.setTimeInMillis(System.currentTimeMillis());
if(calendar.get(Calendar.HOUR) >= 9){
   calendar.add(Calendar.DATE, 1)
}

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