简体   繁体   English

处理警报通知

[英]Handling Alarm notification

I start to combine alarm manager and notification manager on android, and this is my code: 我开始在Android上结合使用警报管理器和通知管理器,这是我的代码:

MainActivity.java MainActivity.java

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

public void setReminderAlarm() {
    Intent intent = new Intent(MainActivity.this, ReminderReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, ReminderReceiver.NOTIF_ID, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 6);
    calendar.set(Calendar.MINUTE, 59);

    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000L, pendingIntent);
}

ReminderReceiver.java ReminderReceiver.java

public static int NOTIF_ID = 101;

@Override
public void onReceive(Context context, Intent intent) {
    showAlarmNotification(context);
}

public void showAlarmNotification(Context context) {
    Intent intentClick = new Intent(context, MainActivity.class);
    PendingIntent pendingClick = PendingIntent.getActivity(context, 0, intentClick, 0);
    NotificationManager notificationManagerCompat = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.cinema)
            .setContentTitle(title)
            .setContentIntent(pendingClick)
            .setContentText(message)
            .setColor(ContextCompat.getColor(context, android.R.color.transparent))
            .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000})
            .setSound(alarmSound)
            .setAutoCancel(true);
    notificationManagerCompat.notify(NOTIF_ID, builder.build());
}

Every time I run the application, the notification always appears even though I have set the time. 每次我运行该应用程序时,即使我已设置时间,该通知也会始终出现。 How do I prevent that? 我该如何预防? Thank you. 谢谢。

The issue is you are setting the time to current day. 问题是您将时间设置为当天。 So if you are opening your app after 6:00, your alarm manager will immediately fire. 因此,如果您在6:00之后打开应用,则警报管理器将立即触发。

You need to check whether the time is over 6:00 for the current day, if yes you need to change the date to the next day: 您需要检查当天的时间是否超过6:00,如果是,则需要将日期更改为第二天:

public void setReminderAlarm() {
    Intent intent = new Intent(MainActivity.this, ReminderReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, ReminderReceiver.NOTIF_ID, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    int curHr = calendar.get(Calendar.HOUR_OF_DAY);
    // Checking whether current hour is over 6
    if (curHr >= 6)
    {
        // Since current hour is over 6, setting the date to the next day
        calendar.add(Calendar.DATE, 1);
    }
    calendar.set(Calendar.HOUR_OF_DAY, 6);
    calendar.set(Calendar.MINUTE, 59);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000L, pendingIntent);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM