AlarmMenager Проверка срабатывания сигнализации


0

У меня был будильник. Основная экранная страница перечисляет все аварийные сигналы и добавляет опцию, чтобы добавить новый аварийный сигнал в список. Я использую диспетчер аварийных сигналов для запуска уведомления или открытия экрана пользователя. После того, как пользователь откроет окно уведомления и нажмите кнопку, он вернется на главный экран и перечислит все тревоги.

Все аварийные сигналы, которые уже срабатывают и не будут срабатывать снова, отмечены разным цветом. Для выявления ведьм тревог увольняют, я использую этот код:

How to check if AlarmManager already has an alarm set?

Но этот код возвращает ЛОЖЬ (сигнал не установлен) для тревоги только через 30 секунд после обожженной тревоги и возвращают TRUE (набор сигнализации) немедленно, когда я вернусь на главный экран.

Чтобы установить будильник, я использую эту услугу:

protected static void SetBackgroudAlrm(long alarmTime, boolean toggleBtnRep,int AlrmID,Context context) { 
    /** Set Alarm in Background */ 
    AlarmManager manager; 
    PendingIntent pIntent = null ; 
     Intent alarmIntent = new Intent(context,AlarmReceiver.class); 
     pIntent = PendingIntent.getBroadcast(context, AlrmID, alarmIntent, 0);   

     manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     if (toggleBtnRep){ //repeat is on 
      manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,alarmTime ,7 * 24 * 60 * 60 * 1000, pIntent); 
     } else { //repeat is off 
      manager.set(AlarmManager.RTC_WAKEUP,alarmTime, pIntent); 
     } 
     Toast.makeText(MainActivity.getContext(), "Alarm Set ", Toast.LENGTH_SHORT).show(); 
     //enable automatically resetting alarms when device reboots 
     ComponentName receiver = new ComponentName(context, BootReceiver.class); 

     PackageManager pm = context.getPackageManager(); 

     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 
    } 

Для того, чтобы проверить, если будильник установлен, я использую этот код:

public static boolean ChkActiveAtrm(int pos){ 
boolean Rtn = false; 
    int AlrmID[]=ListViewAdapter.GetAlrmSelectID(MainActivity.AlrmIDStr.get(pos),pos); 

    for (int i=0;i<AlrmID.length;i++){ 
     boolean alarmUp = (PendingIntent.getBroadcast(MainActivity.getContext(), AlrmID[i], 
       new Intent(MainActivity.getContext(),AlarmReceiver.class), 
       PendingIntent.FLAG_NO_CREATE) != null); 
     if (alarmUp) {Rtn=true;} 
    } //end for 

возвращение Rtn; }

Кто-нибудь еще нашел это явление? Кому я получаю немедленную индикацию для набора тревог/не установлен? Спасибо

  0

показать мне код установки тревоги 19 дек. 142014-12-19 17:30:00

  0

добавить код к вопросу 19 дек. 142014-12-19 18:37:28

0

Во-первых, прекратите полагаться только на AlarmManager, чтобы сохранить и управлять аварийными сигналами. Существует много сценариев, в которых тревоги будут очищены или отложены и т. Д.

Имейте таблицу SQLite и т. Д., Чтобы правильно отслеживать аварийные сигналы, а также созданные, запланированные и запущенные метки времени.

______________________________________________________________________ 
| id | name | repeating | time | interval | set_at | triggered_at | 
______________________________________________________________________ 
| 0 | abc |  1  | 2394000 | 36000 | 2003900 | 1800094  | 
______________________________________________________________________ 

Тогда:

  1. Реализация загрузки намерения приемника читать эту таблицу и график сигналов тревоги для каждой записи.

  2. При обновлении параметра будильника обновите его в базе данных и перепишите его.

  3. при срабатывании будильника, отметьте метки времени в соответствующей записи базы данных.