Обнаружение тревоги в методе onReceive () и сопоставление с базой данных комнат - PullRequest
0 голосов
/ 30 апреля 2020

У меня два сигнала тревоги, которые срабатывают с интервалом в 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");
        }
    }
...