почему это происходит
Во-первых, вы используете Намеренное действие android.intent.action.TIME_SET
, так что это означает, что Каждый раз, как при изменении системной даты / времени ваш BroadcastReceiver будет называться автоматически.
Во-вторых, вы использовали один static boolean flag
в вашем Receiver
классе.
Теперь происходит то, что происходит. Всякий раз, когда вы изменяете системные настройки, флаг переключает свое состояние с false to true
и с true to false
.
.
Это именно то, что происходит в вашем коде, и logcat также показывает, что все работает согласно написанному коду.
Итак, по моему мнению, ничего Неправильно происходит в коде и его выводе.
what should I do to restrict Alarm getting fired again before cancelling
Во-первых, как я думаю, вы не должны использовать Action TIME_SET для включения / выключения флага , поскольку пользователи и разработчики могут не помнить для того, что они изменяют время включения или выключения FLAG,
Лучше всего будет ,
вы должны сами обрабатывать Сервис с помощью Деятельности и показывать там одну ToggleButton для управления состоянием FLAG, а также устанавливать и отменять PendingIntent.
OR
И если вы хотите выполнить задачу вашего сервиса автоматически, тогда вы просто используете AlarmManager
и задаете там время срабатывания сигнализации и интервал только один раз, скажем, время является текущим, а интервал - 50000 миллисекунд.
, поэтому он, очевидно, будет вызывать службу с этого момента через каждые 5 минут, а затем в вашем приложении вам потребуется только одна кнопка ToggelButton, чтобы указать, что синхронизация с сервером включена или выключена , если пользователь включил ее или выключите , напишите свой код AlarmManager в вашей деятельности только в toggleButtontb.setOnCheckedChangeListener(listener)
, я полагаю, это лучший способ , чем то, что вы на самом деле реализуете.