Как правильно удалить сигнал тревоги через определенное время с помощью PendingIntent в Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно удалить сигнал тревоги через определенное время с помощью PendingIntent в Android?

Сообщение Anonymous »

Я пытаюсь установить сигнал тревоги, который должен срабатывать через определенное количество дней (или минут в целях тестирования), и удалять данные, связанные с сигналом тревоги, из SharedPreferences при срабатывании сигнала тревоги. Я использую PendingIntent для обработки сигнала тревоги, но когда срок действия PendingIntent истекает и срабатывает AlarmReceiver, данные (например, MedicineIndex и uniqueID) поступают пустыми, и сигнал тревоги не удаляется должным образом.
Вот код, который устанавливает будильник:

Код: Выделить всё

val deleteIntent = Intent(context, AlarmReceiver::class.java).apply {
action = "com.example.ALARM_ACTION_DELETE"
putExtra("medicationIndex", medication.medicationIndex)
putExtra("uniqueID", medication.uniqueID)}
val deletePendingIntent = PendingIntent.getBroadcast(
context.applicationContext,
alarmID,  // Using the same alarmID for the delete alarm
deleteIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val endTime = System.currentTimeMillis() + (1 * 60 * 1000L)  // Test with 1 minute
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
endTime,
deletePendingIntent
)
А вот код внутри AlarmReceiver:

Код: Выделить всё

 class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
val medName = intent.getStringExtra("medName")
val quantity = intent.getStringExtra("quantity")
val uniqueID = intent.getIntExtra("uniqueID", -1)
if (action == "com.example.ALARM_ACTION_DELETE") {
val medicationIndex = intent.getIntExtra("medicationIndex", -1)
val uniqueID = intent.getStringExtra("uniqueID")

if (medicationIndex != -1 && uniqueID != null) {
// Logic to remove the alarm from SharedPreferences
val sharedPreferences = context.getSharedPreferences("medications", Context.MODE_PRIVATE)
val medications = MedicationUtils.getMedicationsFromSharedPreferences(sharedPreferences)

if (medicationIndex < medications.size) {
MedicationUtils.deleteMedication(context, medicationIndex, medications)
}
} else {
Log.e("AlarmReceiver", "Received empty data: medicationIndex or uniqueID is missing")
}
}
}
}
Когда сигнал тревоги срабатывает по истечении указанного времени, данные, отправленные через putExtra (например, DrugIndex и uniqueID), кажутся пустыми или нулевыми в AlarmReceiver, что предотвращает удаление лекарства из Общие настройки.

Код: Выделить всё

I verified that the values are not null before sending them in the Intent.
I made sure to use PendingIntent.FLAG_UPDATE_CURRENT to update the PendingIntent.
Вопрос: Что может быть причиной того, что данные становятся пустыми при срабатывании тревоги? Как я могу гарантировать, что правильные данные передаются в AlarmReceiver, чтобы я мог удалить сигнал тревоги и связанные с ним данные из SharedPreferences? Любая помощь или предложения будут очень признательны!

Подробнее здесь: https://stackoverflow.com/questions/792 ... dingintent
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»