每日重复警报错误

时间:2018-03-08 15:44:40

标签: android notifications calendar alarmmanager

我的Android中的AlarmManager有问题。我需要在每天上午9点重复闹钟,为此我有下一个代码:

创建主要活动

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

    setAlarm();
}

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);

}

AlarmReceiver

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点出现,而不是每次打开应用程序。

我该怎么做?

谢谢你。

1 个答案:

答案 0 :(得分:1)

尝试为下一个上午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);