Приложение сигнализации предупреждает изменение системного времени - PullRequest
0 голосов
/ 27 апреля 2018

Мое приложение работает следующим образом, пользователь записывает время в минутах, например 40. Затем приложение вызовет будильник через 40 минут. Неважно, является ли приложение активным или работает в фоновом режиме, оно все еще работает.

Моя проблема заключается в следующем, так как я использую метод System.currentTimeMillis (); тогда это делает мое приложение зависимым от системного времени. Поэтому, если я изменю системное время в настройках, мое приложение будильника не будет вызываться в установленное время, оно изменится.

например: если время 10:00, и я установил будильник, который будет вызван через 20 минут, то он будет называться 10:20. Однако, если я перейду к настройкам и изменит системное время на 9:00 после установки будильника, то мое приложение будет вызываться через 100 минут. Как я могу предотвратить это, чтобы, когда установлено время для будильника и какое бы системное время не было, будильник будет вызываться после этих минут.

вот мой код:

public void newSetAlarm(View view) {


        timeEntered = Integer.parseInt(editTextForTime.getText().toString());
        Intent AlarmIntent = new Intent(this, Alarm.class);
        AlarmIntent.putExtra(TIME_LEFT, timeEntered);
        pendingIntentForAlarm = PendingIntent.getBroadcast(getApplicationContext(), 0, AlarmIntent, 0);
        amAlarm = (AlarmManager) getSystemService(ALARM_SERVICE);
        amAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeEntered * 60000, pendingIntentForAlarm);}

удалось решить эту проблему с

<receiver android:name=".TimeChangeBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
<action android:name="android.intent.action.TIMEZONE_CHANGED"/>
</intent-filter>

в файле манифеста, а затем создайте этот класс

 public class TimeChangeBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
DoWhatEverYouWantHere();

}}

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

Как мне решить это

1 Ответ

0 голосов
/ 30 апреля 2018

Вместо использования RTC_WAKEUP при настройке будильника используйте ELAPSED_REALTIME_WAKEUP. Убедитесь, что вы указали дельту между СЕЙЧАС и временем, когда вы хотите, чтобы будильник срабатывал как «время срабатывания» вместо времени на часах.

Истекшее время в реальном времени с момента загрузки устройства. Он НЕ изменяется при изменении часов устройства. Если вы делаете это таким образом, вам не нужно иметь дело с изменениями часов или часовых поясов.

Прочтите https://developer.android.com/reference/android/os/SystemClock для получения подробной информации о различных часах, которые вы можете использовать, и о том, какие из них следует использовать для какого сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...