2015-11-04 3 views
0

У меня есть AlarmManager в PreferenceFragment, который срабатывает будильник один раз в день, как и планировалось. К сожалению, он также запускает будильник сразу каждый раз, когда приложение закрывается. Это происходит после переключения соответствующих предпочтений, но это также происходит, если я открываю приложение в основном действии, а затем закрываю его снова, чтобы этот фрагмент предпочтений и связанная с ним активность не запускались.Запуск AlarmManager сразу после закрытия приложения

Я вижу, что ранее запущенная служба по-прежнему работает в фоновом режиме, поэтому я могу предположить, что при остановке приложения воссоздается Тревога, вызывающая непосредственный сигнал тревоги, и что я, вероятно, должен использовать PendingIntent.FLAG_UPDATE_CURRENT, но я не могу показаться заставить это работать.

Я также не понимаю, почему все это является проблемой в первую очередь. Разумеется, использование AlarmManager.INTERVAL_DAY должно означать, что даже если будильник был воссоздан, он не должен срабатывать, по крайней мере, на один день?

Вот код в PreferenceFragment:

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    if (key.equals(KEY_PREF_NOTIFICATION)) { 

     Intent alarmIntent = new Intent(getActivity(), AlarmReciever.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, alarmIntent, 0); 

     if (sharedPreferences.getBoolean("notification_checkbox", true)) { 

      AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
      manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pendingIntent); 

      // turns the boot reciever on 
      ComponentName receiver = new ComponentName(getActivity(), BootReceiver.class); 
      PackageManager pm = getActivity().getPackageManager(); 

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

      Log.e(TAG, "preference changed"); 

     } else { 
      AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
      manager.cancel(pendingIntent); 

      // turns the boot reciever off 
      ComponentName receiver = new ComponentName(getActivity(), BootReceiver.class); 
      PackageManager pm = getActivity().getPackageManager(); 

      pm.setComponentEnabledSetting(receiver, 
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
        PackageManager.DONT_KILL_APP); 

      Log.e(TAG, "preference unchanged"); 
     } 
    } 
} 

ответ

0

Нашли проблему. Я использовал START_STICKY в службе, а не START_NOT_STICKY, что означало, что служба, а не ожидающие намерения, перезапускались при каждом закрытии приложения.