Android - Как правильно отслеживать несколько PendingIntents? - PullRequest
0 голосов
/ 02 мая 2018

Я кратко объясню, чего мне нужно достичь, я использовал PendingIntent в сочетании с AlarmManager.setRepeating() для уведомления пользователя каждую неделю.

val notificationAlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val notificationIntent = Intent(this, ReminderBroadcastReceiver::class.java)
val pendingNotificationIntent = PendingIntent.getBroadcast(this, 549078, notificationIntent,
        PendingIntent.FLAG_UPDATE_CURRENT)
 myCalendar.set(Calendar.HOUR_OF_DAY, 10)
 notificationAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, myCalendar.timeInMillis, notificationOffset(sub.cycle),
                    pendingNotificationIntent)

Как вы можете видеть, я заставляю 549078 как resultCode в PendingIntent.getBroadcast().

Как правильно различать коды результатов, чтобы я не только мог иметь несколько уведомлений (поскольку один и тот же код результата будет перезаписан при создании нового), но мне также нужен способ отслеживать код результата, потому что я могу удалить его до того, как он будет показан.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я столкнулся с той же проблемой, я сделал следующее:

1) Я создал поле int, которое я создаю в своей основной деятельности в качестве статического поля.

2) Я получаю значение этой переменной в onCreate() основной активности из базы данных приложения.

3) Каждый раз, когда я создаю новую тревогу, я получаю новый код запроса через функцию:

public static int getRequestCode() {
    int temp = this.requestCode++;
    // Update the database value with the current requestCode value
    return temp;
}

4) В моем случае я добавил новое поле в класс сигналов тревоги под названием requestCode, чтобы я мог отслеживать, какой код запроса для какого сигнала тревоги, так как я уже сохраняю сигналы в своей базе данных, для вашего случая я не уверен как именно ваше приложение, но я думаю, вам нужно найти способ сохранить это значение для каждого сигнала тревоги.

Я не уверен, что это будет очень полезно, так как я не уверен, используете ли вы базу данных для своего приложения или нет, но я рекомендую вам рассмотреть возможность создания базы данных, даже локальной, если вы не заботитесь о том, чтобы данных на сервере пока нет (вы можете использовать Библиотеку комнат для этого, и это очень просто, вот ссылка https://developer.android.com/topic/libraries/architecture/room) , так как я считаю, что это, безусловно, создаст вам много проблем в долгосрочной перспективе, поскольку система на самом деле не создает новый PendingIntent при его инициации, она возвращает захватывающий токен, если все параметры соответствуют

Надеюсь, это было полезно:)

0 голосов
/ 03 мая 2018

Невозможно запросить AlarmManager для PendingIntent с. Вы должны сохранить resultCode и другую информацию, чтобы воссоздать PendingIntent, чтобы удалить его.

Например, в SharedPreferences или в базе данных, такой как SqliteDB или Room. Затем вы можете восстановить PendingIntent, чтобы отменить его.

См. , как отменить PendingIntent .

См. Как Android сравнивает ожидающие намерения для получения подробной информации о том, какие поля важны при сравнении намерений для удаления.

...