android - 如何在广播接收器 Android Kotlin 中处理多个警报
问题描述
我的锻炼应用程序允许用户创建多个通知警报来提示他们锻炼。我正在使用 TimePickerDialog 来设置警报。我正在使用捆绑包将警报的详细信息添加到 AlarmReceivers Intent。在 StackO 上对此进行研究后,我认为我必须使用具有不同请求代码的不同待处理意图才能产生多个警报。
我的问题是我如何在 AlarmReceiver 中知道哪个待处理的意图导致了 onReceive?我可以使用待处理意图的请求代码来确定它是哪一个吗?在意图包中有一个 id 并没有帮助,因为它可能包含两个警报附加项。
如果您能解释这应该如何工作,请提前致谢......
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {
lateinit var alarmManager: AlarmManager
val intent = Intent(activity, AlarmReceiver::class.java)
val bundle = Bundle()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// use the current time as default values for the picker
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
// create a new instance of the TimePicker dialogue and return it
return TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity())
)
override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
val mTag = tag
if (mTag == "time1") {
// add alarm to the intent bundle
bundle.putString("Alarm1", "This is the ${hourOfDay}:${minute} alert")
intent.putExtras(bundle)
setAlarm(hourOfDay,minute,intent, 1) //request code 1
}
if (mTag == "time2") {
// add alarm to the intent bundle
bundle.putString("Alarm2", "This is the ${hourOfDay}:${minute} alert")
intent.putExtras(bundle)
setAlarm(hourOfDay,minute,intent, 2) //request code 2
}
}
fun setAlarm(hourOfDay: Int, minute: Int, intent: Intent, requestCode: Int) {
alarmManager = activity.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val pendingIntent = PendingIntent.getBroadcast(this.activity, requestCode, intent,PendingIntent.FLAG_UPDATE_CURRENT)
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay)
calendar.set(Calendar.MINUTE, minute)
calendar.set(Calendar.SECOND, 0)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent)
}
在 AlarmReceiver 类中:
class AlarmReceiver : BroadcastReceiver()
{override fun onReceive(context: Context, intent: Intent) {
val intent = Intent(context, AlarmReceiver::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
val pendingIntent = val pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT)
// HOW TO TEST WHICH PENDING INTENT THIS IS?
解决方案
推荐阅读
- android-studio - 如何在 Android Studio 3.1.4 中正确添加 rhino - Android
- neo4j - 即使在 neo4j 中存在重复节点,也返回 1 个节点
- javascript - 如何在javascript中调用同一函数内部和外部的函数
- python - 在块中加载数据时 Pandas None 类型
- python - Python 加载 windows 库 C# 转换
- tornadofx - TornadoFX:标签未更新
- php - 单击聊天按钮时将用户移动到使用 AJAX 的聊天页面| 重要的
- python - 我可以找出导致我的 Python MemoryError 的分配请求吗?
- c# - 一起为控制器 .NET 核心 Web API 查询字符串和属性路由
- winforms - 具有新 Office 高 DPI 支持的 Outlook VSTO