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

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

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

Я ссылался на это решение. Я пытаюсь сопоставить это намерение следующим образом:

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

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

4b9b3361

Ответ 1

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

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

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. Затем он отменяет предыдущий и reset его.

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);

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

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

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

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

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

Ответ 2

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

    int REQUEST_CODE=2344; // Unique ID  
    PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);

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

Ответ 3

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

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

Ответ 4

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