Мое приложение для тренировок позволяет пользователю создавать несколько уведомлений, чтобы они могли выполнять упражнения. Я использую TimePickerDialog, чтобы установить сигналы тревоги. Я добавляю детали сигналов тревоги в AlarmReceivers Intent, используя пакет. После изучения этого вопроса в StackO я думаю, что мне нужно использовать разные ожидающие намерения с разными кодами запросов, чтобы иметь несколько аварийных сигналов.
Мой вопрос: как мне узнать в AlarmReceiver, какое ожидающее намерение вызвало onReceive? Могу ли я использовать код запроса ожидающего намерения, чтобы определить, какой это был? Наличие идентификатора в наборе намерений не помогает, потому что он может содержать оба дополнения тревоги.
Заранее спасибо, если вы можете объяснить, как это должно работать ....
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?