Конфликт идентификатора при отмене нескольких будильников в Android

Мое приложение позволяет пользователям устанавливать напоминания о приеме лекарств в определенное время. Нет проблем с установкой этих будильников. У меня возникли трудности с отменой этих сигналов тревоги в более поздний момент времени в другом действии.

Это мой код для установки будильника:

private void setAlarms() {
    Intent myIntent=new Intent(getApplicationContext(), AlarmReceiver.class);
    myIntent.putExtra("MedName",medication_name);
    myIntent.setAction("b5.project.medibro.receivers.AlarmReceiver");
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);


    int counter=0;
    for(String timer: timers){
        //timer is a string of the form "hh:mm"
        try {
            String[] comps=timer.split(":");
            Calendar cal=Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(comps[0]));
            cal.set(Calendar.MINUTE, Integer.valueOf(comps[1]));
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            //Date date= dateFormat.parse(startDate + " " + timer);
            Log.d(TAG,comps[0]+" "+comps[1]+ "Alarm Time: " + cal.getTime().toString());
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), counter, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                    cal.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY,
                    pendingIntent);

            Log.d(TAG,"Counter: "+counter);
            counter++;

        } catch (ParseException e) {
            e.printStackTrace();
            Log.d(TAG,"Time Parsing error: "+e.getMessage());
        }
    }

Как видите, счетчик — это идентификатор ожидающих намерений, принадлежащих ONE Medicine. Но когда есть несколько лекарств, ожидающие намерения будут иметь одинаковые идентификаторы (значения счетчика).

Может ли кто-нибудь предложить альтернативный/эффективный метод разрешения этого конфликта?


person Abhijith Gururaj    schedule 01.02.2016    source источник


Ответы (1)


Вы должны где-то сохранить значение счетчика, когда цикл завершится. И получить его в начале цикла. Сохраните их как строку целых чисел, разделенных запятыми, содержащую значения счетчика всех намерений, связанных с конкретным лекарством. Например:

String a = "0,1,2,3,4";
putString("MEDICINE_1",a);

тогда

getString("MEDICINE_1").split(',')
person Salman Tariq    schedule 01.02.2016
comment
Но как насчет MEDICINE_2, даже если у него будут одинаковые значения счетчика (0,1,2,3,4), и я не смогу получить правильное ожидающее намерение, поскольку значения счетчика переопределяют друг друга. - person Abhijith Gururaj; 02.02.2016
comment
переместите инициализацию счетчика в 0 из метода. таким образом значения счетчика не будут начинаться с 0 при добавлении нового лекарства. - person Salman Tariq; 03.02.2016