У меня есть 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");
}
}
}