Я новичок в разработке приложений для Android

Необходимо включить тревогу по вводимым пользователем данным.

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

Alarmmanager: используется для запуска события в указанное время, но имеет функции установки или отмены сигнала тревоги.

Идея: Использование AlarmClock для установки будильника и отмены будильника с помощью Alarmmanager .. возможно ли это сделать

Как я могу это сделать .? выручи меня

1
Venu 2 Янв 2016 в 15:57

2 ответа

Лучший ответ

Чтобы создать будильник, вы можете сделать что-то вроде этого:

        //... some code here

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // if you don't want the alarm to go off even in Doze mode, use
            // setExact instead
            mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
                    alarmTimeMillis,
                    getPendingIntent(context);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mAlarmManager.setExact(AlarmManager.RTC_WAKEUP,
                    alarmTimeMillis,
                    getPendingIntent(context);
        } else {
            // Inexact time was only introduced in API 19+. Before that, all was exact time
            mAlarmManager.set(AlarmManager.RTC_WAKEUP,
                    alarmTimeMillis,
                    getPendingIntent(context);
        }

Несколько слов здесь. До API 19 все тревоги были точными, поэтому мы используем метод set. В API 19 и позже были введены неточные сигналы тревоги, поэтому нам нужно использовать setExact для точных сигналов тревоги и set для неточных сигналов тревоги. . В API 23 был введен режим Doze. В этом режиме любой будильник, установленный с помощью set или setExact, не сработает, если телефон уже находится в спящем режиме. Чтобы вывести устройство из режима сна и вызвать тревогу, используйте setExactAndAllowWhileIdle

Метод getPendingIntent может быть примерно таким:

    private PendingIntent getPendingIntent(Context context) {
        int requestCode = 69;
        return PendingIntent.getBroadcast(context, requestCode,
                new Intent(mContext, AlarmReceiver.class),
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

Конечно, вы можете добавить в намерение как обычно.

Чтобы отменить тревогу, вам просто нужно создать ожидающее намерение с тем же кодом requestCode и вызвать cancel в диспетчере тревог, например:

(AlarmManager) context.getSystemService(Context.ALARM_SERVICE)
                      .cancel(getPendingIntent(context));

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

0
Aitor Viana 2 Янв 2016 в 15:54

Чтобы установить будильник, вам нужно создать намерение, которое будет вводиться для pendingIndent. Этот pendingIntent перейдет в диспетчер аварийных сигналов.

Чтобы отменить тревогу, создайте pendingIntent с тем же кодом запроса / ID, а затем вызовите alarmanager.cancel ()

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

0
Rusheel Jain 2 Янв 2016 в 13:54