gpt4 book ai didi

android - 一旦我的代码中触发了警报,有没有办法从挂起的 Intent 中获取 requestCode?

转载 作者:行者123 更新时间:2023-12-02 12:50:49 27 4
gpt4 key购买 nike

我正在类里面制作一个基本的 android/kotlin 警报应用程序。一旦触发警报,我希望能够从 SQLite 数据库中删除警报,或者如果它是重复警报,则重新设置警报。对于这两个,我需要来自 pendingIntent 的 requestCode,因为我使用数据库中警报的主键作为 requestCode。
我不是唯一想要这个的人,解决方案似乎是使用 Intent.putExtras(),但我的 Intent 不是这样设置的:

var intentName =  when (newAlarmFrequency){
"Once" -> "alarmTask"
"Daily" -> "alarmTaskDaily"
"Weekly" -> "alarmTaskWeekly"
else -> null
}

并像这样传递到 pi 中:
val  pi  = PendingIntent.getBroadcast(this, newAlarmID.toInt(), Intent(intentName), PendingIntent.FLAG_UPDATE_CURRENT)

稍后会像这样处理:
val receiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
"alarmTask" -> handleAlarm(0)
"alarmTaskDaily" -> handleAlarm(1)
"alarmTaskWeekly" -> handleAlarm(2)

}
}
}

val filter = IntentFilter().apply {
addAction("alarmTask")
addAction("alarmTaskDaily")
addAction("alarmTaskWeekly")
}
registerReceiver(receiver, filter)

有没有办法按照我的方式完成这项工作,或者我是否需要更改设置 Intent 的方式?

最佳答案

回答你的问题

Is there a way to get the requestCode out of a pending intent once an alarm is triggered in my code?



不。你实际上没有得到 PendingIntent在您的 BroadcastReceiver ,你只会得到 IntentPendingIntent 包裹.所以 requestCode未送达 onReceive() .

正如其他人已经提到的那样,您可以通过放置 requestCode 来做到这一点。在 Intent作为“额外”。像这样:
val requestCode = newAlarmID.toInt()
val pi = PendingIntent.getBroadcast(this, requestCode,
Intent(intentName).putExtra("requestCode", requestCode),
PendingIntent.FLAG_UPDATE_CURRENT)

当警报触发时,获取 requestCode来自 IntentonReceive()像这样:
override fun onReceive(context: Context?, intent: Intent?) {
val requestCode = intent?.getIntExtra("requestCode", -1) ?: -1
when (intent?.action) {
"alarmTask" -> handleAlarm(0, requestCode)
"alarmTaskDaily" -> handleAlarm(1, requestCode)
"alarmTaskWeekly" -> handleAlarm(2, requestCode)
}
}

这将提取 requestCode来自 Intent并将其传递给您的 handleAlarm()方法。

注意:如果,无论出于何种原因, requestCode无法确定,上面的代码将其设置为 -1。

关于android - 一旦我的代码中触发了警报,有没有办法从挂起的 Intent 中获取 requestCode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61961604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com