Подтвердить что ты не робот

Дата и время прослушивателя изменений в Android?

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

Итак, мне может понадобиться reset все тревоги снова. Есть ли прослушиватель смены даты и времени в android?

4b9b3361

Ответ 1

Создайте фильтр намерений:

     static {
        s_intentFilter = new IntentFilter();
        s_intentFilter.addAction(Intent.ACTION_TIME_TICK);
        s_intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
        s_intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
    }

и широковещательный приемник:

    private final BroadcastReceiver m_timeChangedReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();

            if (action.equals(Intent.ACTION_TIME_CHANGED) ||
                action.equals(Intent.ACTION_TIMEZONE_CHANGED))
            {
                doWorkSon();
            }
        }
    };

зарегистрировать приемник:

     public void onCreate() {
        super.onCreate();
        registerReceiver(m_timeChangedReceiver, s_intentFilter);     
    }

EDIT:

и отмените регистрацию:

     public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(m_timeChangedReceiver);     
    }

Ответ 2

В дополнение к принятому ответу

Если вы хотите прослушать изменения времени во время работы вашего приложения, я бы зарегистрировался в манифесте:

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

Если вы это сделаете, не указывайте явным образом регистратор в коде с помощью registerReceiver и unregisterReceiver.

Опять же, это просто дополнение к принятому ответу.