#android #android_sdk #broadcast_receiver #android_alarm_manager #android_broadcastreceiver
Здравствуйте! Подобный вопрос уже был от меня, но ответа, который решил бы мою проблему на него не получил. Наверное, не стоит писать здесь свой код, так как скорее всего, я выбрал неверный подход к решению задачи. Тем не менее, оставлю ссылку на свой предыдущий вопрос: тут мой вопрос. Подскажите, пожалуйста, как реализовать следующую задачу: Есть таблица в БД, в которой находятся записи. Колонки в таблице: [ID][NAME][DAY][HOURS][MINUTES] Также есть Активити, которую нужно вызывать в заданное время. То есть, нужно сканировать таблицу в БД, и на основе этих данных нужно установить Alarm-ы, которые будут вызывать Активити. Содержимое Активити менять не нужно (оно будет менятся уже в onCreate() самой Активити). Проблема в том, что я не понимаю, как поставить alarm-ы в множественном числе. Опять-таки, по ссылке, приведённой выше, я показал своё виденье реализации задачи. Заранее спасибо за ответы, очень надеюсь на Вашу помощь, ибо без решения этой задачи не могу двигаться дальше :(
Ответы
Ответ 1
Попробуйте в Вашем коде заменить на это: AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); intent.putExtra("alarm message", "alarm message"); if (android.os.Build.VERSION.SDK_INT >= 19) { am.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender); } else { am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender); } PendingIntent sender = PendingIntent.getBroadcast(context, i, intent, PendingIntent.FLAG_UPDATE_CURRENT); Просто для разных версий андроида регистрация pendingIntent-a происходит по-разному. Плюс, вы всегда регистрировали его под номером 192837, я заменил его на i, так как эта переменная используется в цикле, и она будет уникальная, и каждый последующий pendingIntent не будет перезаписывать предыдущий. Если есть необходимость удалить все зарегестрированные интенты, то вызовите такую функцию: public static void clearAlarmReceiver(Context context, int intentsCount) { for (int i = 0; i < intentsCount; i++) { Intent intent = new Intent(context, CheckAlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(pendingIntent); pendingIntent.cancel(); } }
Комментариев нет:
Отправить комментарий