Есть ли способ проверить, установлен ли будильник?

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

Я ссылался на это решение. Я пытаюсь соответствовать намерению, как это:

Intent intent = new Intent();
        intent.setAction("com.vit.upload");
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);

Но это не работает. Что еще будет работать?

4 ответа

Решение

Прежде всего, небольшое руководство о том, как получить доступ к ранее созданным аварийным сигналам:

Вы можете различать сигналы тревоги, создавая каждый с уникальным идентификатором, таким как:

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

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

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

Идея проста. Следите за идентификаторами, а затем используйте их для доступа к соответствующим сигналам тревоги. Если вы создаете несколько сигналов тревоги с одним и тем же идентификатором, самая последняя из них отменяет предыдущую.

Приходя к вашей основной проблеме, вместо того, чтобы проверять, активен ли ваш будильник при каждом запуске приложения, просто переустановите его в своей активности onCreate() метод. с тем же PendingIntent, который я описал выше. Это избавляет вас от необходимости проверять, установлен ли будильник ранее или нет. Поскольку ваша цель состоит в том, чтобы поддерживать активную сигнализацию, не повредит переопределить ранее установленную настройку при каждом запуске приложения. Просто убедитесь, что вы используете тот же идентификатор для создания PendingIntent.

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

Давайте рассмотрим другой случай: когда вы выключите свое устройство, все ваши тревоги будут отменены. Это не оставляет вам выбора, кроме как установить их снова при перезагрузке. Для этого вам нужно будет использовать BroadcastReceiver.

Этот ответ поможет вам, как это сделать. Просто заново создайте тревогу в методе onReceive() вашего BroadcastReceiver, как указано выше.

  • Первый сигнал тревоги не будет работать при перезагрузке устройства Android.
  • Вы можете использовать логические общие параметры, чтобы проверить, создан ли сигнал тревоги или нет.
  • Android в ожидании намерения использовать уникальный идентификатор

    int REQUEST_CODE=2344;// Уникальный идентификатор
    PendingIntent pIntent = PendingIntent.getBroadcast(контекст, REQUEST_CODE, намерение, PendingIntent.FLAG_NO_CREATE);

вы должны использовать широковещательную рассылку Boot Receiver при перезагрузке системы, а затем снова создать alaram с тем же кодом запроса REQUEST_CODE=2344;

Исходя из моего опыта, если вы используете одни и те же Intent и FLAG_UPDATE_CURRENT, вы можете быть уверены, что у вас не будет двух настроенных сигналов тревоги для одного и того же намерения. Также вы можете внимательно посмотреть на FLAG_NO_CREATE, который используется с функциями get и возвращает значение null, если pendingintent с описанным намерением уже существует.

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

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

Другие вопросы по тегам