ЗДЕСЬ ПОДРОБНЫЙ ОТВЕТ проверьте ссылку внизу для более подробной информации.
Надеюсь, это поможет. Возможно, ваша проблема связана с версиями для Android, поэтому проверьте ссылку для получения более подробной информации
Приложение
получает экземпляр AlarmManager и устанавливает сигнал тревоги, используя PendingIntent. Подробнее об использовании и настройке будильника будет рассказано в следующем разделе. AlarmManager является интерфейсом на стороне приложения для поддержки AlarmManagerService. Он абстрагирует детали интерфейса Binder, используемого для связи с системным процессом (system_server), на котором размещается AlarmManagerService. Эти два компонента управляют сигнализацией, установленной приложением, и будут правильно отправлять PendingIntent. Эта архитектура диспетчера / службы используется во всей платформе Android и предназначена для обеспечения безопасности и изоляции. Процесс system_server выполняется с привилегиями, которых нет у обычных приложений. Если вы не знакомы с использованием разрешений Android, см. Эту статью для получения дополнительной информации о процессах приложения и идентификаторах пользователей. Эти дополнительные разрешения - то, что позволяет system_server получать доступ к базовому драйверу тревоги ядра. Драйвер аварийных сигналов - это то, что управляет настройкой аварийных сигналов для пробуждения устройства независимо от состояния сна SoC.
Когда срабатывает сигнал тревоги, устройство пробуждается (если оно спит), и AlarmManagerService получает уведомление об истечении срока действия сигнала тревоги. Затем он отправит PendingIntent соответственно. Это приведет к активации соответствующего компонента в MyApp. Если MyApp не был запущен или его процесс не кэширован, он будет запущен, поэтому компонент можно будет активировать.
основное использование будет как
public class MyActivity extends Activity {
...
private AlarmManager mAlarmMgr;
...
public void onCreate(Bundle savedInstance) {
...
mAlarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
...
}
...
}
Давайте создадим PendingIntent для нашей MyActivity, используя имя компонента .
Intent alarmIntent = new Intent(context, MyActivity.class);
PendingIntent pend = PendingIntent.getActivity(context,
0,
alarmIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
Теперь, когда у нас есть PendingIntent и AlarmManager, мы можем установить нашу тревогу так, чтобы наша Активность запускалась, когда истекла тревога. Для этого нам нужно выяснить, когда мы хотим, чтобы сработала наша сигнализация, и должен ли он разбудить устройство или просто быть доставленным при следующем пробуждении устройства. Помните, у нас есть два разных способа указания времени для наших будильников: прошедшее время или время по календарному времени (RTC). Таким образом, наши варианты - ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC или RTC_WAKEUP. Варианты _WAKEUP - это наши «агрессивные» сигналы тревоги, когда мы хотим, чтобы устройство выходило из режима пониженного энергопотребления, чтобы перезвонить нашему приложению. Для нашего примера приложения, давайте настроим это в пользовательском BroadcastReceiver и заставим его активировать нашу активность примерно через 30 секунд после загрузки устройства
public class MyBootReceiver extends BroadcastReceiver {
public void onReceive(Context, context, Intent intent) {
...
AlarmManager alarmMgr =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
long wakeTime = SystemClock.elapsedRealtime() + 30000;
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, wakeTime, pend);
}
}
Теперь, когда наше устройство загружается и отправляется широковещательная рассылка BOOT_COMPLETED, процесс нашего приложения будет запущен, и наш получатель установит будильник, чтобы активировать нашу активность через 30 секунд. Обратите внимание, что на устройствах Android 3.1 или более поздней версии вы должны сначала вручную запустить свое приложение до BOOT_COMPLETED.
КРЕДИТ ИДЕТ к автору этого БЛОГ
Если вы хотите установить повторную тревогу с помощью SetExact, вы обязаны остановить все остальные ожидающие намерения в одно и то же время, проверьте эту ссылку , для этого здесь много примеров, как это сделать! снова заслуга этого автора