У меня два сигнала тревоги, которые срабатывают с интервалом в 3 минуты. Что я буду хранить в базе данных Room, чтобы узнать, какой сигнал тревоги срабатывает? Я использую TIME_ONE
и TIME_TWO
для передачи значения и обнаружения на стороне получателя. Но я думаю, что это плохая практика для большого количества сигналов тревоги. Было бы лучше, если бы я мог сопоставить идентификатор тревоги, которая сработает, с сохраненным идентификатором в базе данных комнаты. Или, если я сохраню код запроса в БД, то как я получу код запроса в методе onReceive. Я также пробовал alarmIntent.putExtra(TIME_ONE, 2);
и alarmIntent.putExtra(TIME_ONE, 1);
Я не уверен, может ли одно имя содержать два значения и работать нормально. Какой будет идентификатор тревоги, чтобы я мог получить точную тревогу в методе onReceive
при его срабатывании? Если я передаю requestcode
с использованием putExtra
, должен ли я использовать один тег (TIME_ONE
) или несколько тегов (TIME_ONE
, TIME_TWO
) для обнаружения сигналов тревоги? Я не хочу использовать if else, чтобы проверить, какой из них выбрасывает 1, чтобы я мог справиться. Как я могу использовать намерение метода onReceive, чтобы я мог непосредственно знать, какой сигнал тревоги срабатывает? Вы можете представить сценарий как две тревоги, устанавливающие время для тревоги и определяющие, для какой тревоги вызывается метод onReceive.
private void setAlarm() {
Intent alarmIntent = new Intent(this, MyAlarmReceiver.class);
alarmIntent.putExtra(TIME_ONE, 1);
pendingIntent = PendingIntent.getBroadcast(this, 1, alarmIntent, 0);
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 1000 * 60 * 3; // 3 min
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 22);
calendar.set(Calendar.MINUTE, 1);
manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);// repeat every two min interval
}
private void setSecAlarm() {
Intent alarmIntent = new Intent(this, MyAlarmReceiver.class);
alarmIntent.putExtra(TIME_TWO, 1);
pendingIntent = PendingIntent.getBroadcast(this, 2, alarmIntent, 0);
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 1000 * 60 * 3; // 3 min
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 22);
calendar.set(Calendar.MINUTE, 3);
manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);// repeat every two min interval
}
Метод onReceive
:
Calendar instance = Calendar.getInstance();
@Override
public void onReceive(Context context, Intent intent) {
int hour = instance.get(Calendar.HOUR);
int minute = instance.get(Calendar.MINUTE);
int second = instance.get(Calendar.SECOND);
int which_one = intent.getIntExtra(TIME_ONE,0);
int which_two = intent.getIntExtra(TIME_TWO,0);
if(which_one == 1 && which_two == 0){
Log.d(MY_TAG, hour+":"+minute+":"+second+ " First alarm called");
}else if(which_one == 0 && which_two == 1){
Log.d(MY_TAG, hour+":"+minute+":"+second+" Second alarm called");
}else{
Log.d(MY_TAG, hour+":"+minute+":"+second+ " none of them");
}
}