Обработка тревожного уведомления - PullRequest
0 голосов
/ 01 сентября 2018

Я начинаю совмещать диспетчер тревог и диспетчер уведомлений на android, и это мой код:

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

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

Каждый раз, когда я запускаю приложение, уведомление всегда появляется, даже если я установил время. Как мне это предотвратить? Спасибо.

1 Ответ

0 голосов
/ 01 сентября 2018

Проблема в том, что вы устанавливаете время на текущий день. Поэтому, если вы открываете свое приложение после 6:00, менеджер аварийных сигналов немедленно сработает.

Вам необходимо проверить, не превышает ли время текущего дня более 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);
}
...