代码之家  ›  专栏  ›  技术社区  ›  richc

广播接收机android kotlin中多个告警的处理

  •  0
  • richc  · 技术社区  · 7 年前

    我的练习应用程序允许用户创建多个通知警报以提示他们练习。我正在使用计时器对话框设置警报。我正在使用一个包将警报的详细信息添加到AlarmReceivers意图中。在stacko上研究了这个问题之后,我想我必须使用不同的挂起意图和不同的请求代码,才能有多个警报。

    我的问题是如何在AlarmReceiver中知道哪个挂起的意图导致了OnReceive?我可以使用挂起意图的请求代码来确定它是哪一个吗?在intent bundle中有一个id没有帮助,因为它可能同时包含两个alarm extra。

    如果你能解释一下这应该怎么做的话,请提前谢谢。

    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?
    
    0 回复  |  直到 7 年前