Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Giekelberri
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 9
#1

Alarm broadcastIntent убивается через какое-то время - Программирование Android

16.01.2015, 09:47. Просмотров 1023. Ответов 18
Метки нет (Все метки)

Привет! Я разрабатываю приложение похожее на будильник. Я использую Android 4.2.2.

Проблема заключается в том, что после некоторого времени (около 1 - 2 часов) alarm pendingIntent убивается кем-то и будильник не срабатывает.

Последовательность шагов следующая
1. Вызов SetAlarm() и установка на срабатывание через 2 часа.
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intentToFire, 0); alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, alarmIntent);
2. Я вижу, что Alarm установлен через "adb shell dumpsys alarm". +1h59m осталось
3. После 10 минут... я вижу, что Alarm установлен через "adb shell dumpsys alarm".+1h49m осталось
4. После 20 минут... я вижу, что Alarm установлен через "adb shell dumpsys alarm".+1h39m осталось
5. И так далее...
6. Но после гле-то 1-2 часов (время варьируется) Oooops. Я больше не вижу alarm pendingIntent в списке "adb shell dumpsys alarm".

Android родной будильник работает нормально.

Код:
Broadcast Receiver, зарегистрированный в AndroidManifest.xml

XML
1
2
3
4
5
6
7
8
9
10
    <receiver android:name=".BrdRcvr" android:exported="true">
        <intent-filter>        
            <action android:name="action.alarm.RI" />
            <action android:name="action.alarm.ERT0" />
            <action android:name="action.alarm.ERT1" />
            <action android:name="action.alarm.ERT2" />
            <action android:name="action.alarm.ERT3" />
            <action android:name="action.alarm.ERT4" />
        </intent-filter>
    </receiver>
Функция установки Alarm'а:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static void setAlarmRI(Context context) {
    //Read time from preferences
    SharedPreferences appPref = 
            context.getSharedPreferences(SettingsActivity.APP_PREF, Context.MODE_PRIVATE);
 
    int timeToAlarmMs = Integer.valueOf(appPref.getInt(SettingsActivity.APP_PREF_RI, 0)) * 1000; //[ms]
 
    //!getSystemService must be called after onCreate() 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    long time = SystemClock.elapsedRealtime() + timeToAlarmMs * 60; //[min]
 
    //Intent
    Intent intentToFire = new Intent(context, BrdRcvr.class);
    intentToFire.setAction("action.alarm.RI");
 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 
            0, intentToFire, 0/*flags*/);
 
    if (timeToAlarmMs > 0) {
        //for API >= 19 AlarmManager.set() triggers not at exact time (for battery saving)
        //and we should use AlarmManager.setExact() instead
        if (Build.VERSION.SDK_INT >= 19)
            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, alarmIntent);
        else
            alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, alarmIntent);
 
        Log.d(ALARMRI, "API:" + Integer.valueOf(Build.VERSION.SDK_INT).toString());
        Log.d(ALARMRI, "set:" + Long.valueOf(time).toString());
        Log.d(ALARMRI, "cur:" + Long.valueOf(SystemClock.elapsedRealtime()).toString());
        Log.d(ALARMRI, "delta:" + (Long.valueOf(time) -
                Long.valueOf(SystemClock.elapsedRealtime())));
    } else {
        alarmManager.cancel(alarmIntent);
        Log.d(ALARMRI, "unset");
    }
}
У кого-нибудь есть идеи в чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2015, 09:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Alarm broadcastIntent убивается через какое-то время (Программирование Android):

Уведомления в заданное время без Alarm - Программирование Android
Пытаюсь вывести уведомление в заданное время не используя AlarmManager. Т.к. через AlarmManager, после перезагрузки, выводятся все...

Процесс не убивается ни через cmd, ни через Process Explorer - Windows 7
Как его убить? И cmd и PE запускались от Администратора

Через какое время частицы встретятся? - Механика
Три частицы начинают одновременно двигаться с постоянными по модулю скоростями v из вершин равностороннего треугольника со стороной A ....

Через какое время вода испарится - Термодинамика и МКТ
Форумчане, прошу помощи с такой задачей. В долго стоявшую в комнате кастрюлю налили m = 2 кг горячей воды с температурой t = 97 °C и...

Через какое время тело упадёт? - Механика
Построить траекторию тела брошено вертикально вверх с некоторой высоты, V=20мс/с h=10м t=-шаг 0.2 определить, через какое...

Через какое время поезд остановится? - Механика
Поезд идущий со скоростью 72 км/ч проходящие до остановки за 200 метров.Через сколько времени поезд остановится?

18
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
19.01.2015, 13:46 #16
Цитата Сообщение от Giekelberri Посмотреть сообщение
насколько я понимаю
интересно узнать

Добавлено через 1 минуту
Цитата Сообщение от Giekelberri Посмотреть сообщение
есть такое разрешение com.android.alarm.permission.SET_ALARM
http://developer.android.com/referen...larmClock.html
0
Spelcrawler
531 / 501 / 111
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
19.01.2015, 13:46 #17
Цитата Сообщение от Giekelberri Посмотреть сообщение
Но вот что странно: есть такое разрешение com.android.alarm.permission.SET_ALARM
Это для установки системного будильника. У меня сам аларм отрабатывает хорошо, но есть проблема: аларм запускает сервис, и через некоторое время (когда приложение выгружается из памяти) сервис запускается, но у него интент=null. Как это возможно и как это поправить?
0
Giekelberri
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 9
19.01.2015, 14:21  [ТС] #18
2 Armagedo:
Цитата Сообщение от Armagedo Посмотреть сообщение
интересно узнать
читаю Meier R. - "Professional Android 4 Application Development"
с. 342. Timer is generally poor form.
с. 351. Unlike Timers, Alarms operated outside the scope of your application...
Alarms are an effective means to reducing your application's resource requierments...

Поэтому мне кажется гораздо проще с Alarm. "Установил и забыл".
0
Giekelberri
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 9
23.01.2015, 12:54  [ТС] #19
Резюме по тестированию.

1) В эмуляторе. Тестировал 12 часов. Работает.

2) На устройстве Huawei Y330 (Android 4.2.2) Alarm поработал ~24 часа, затем отрубился.

Вобщем, мало что изменилось - Alarm уничтожается в непредвиденный момент непонятно кем.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 12:54
Привет! Вот еще темы с ответами:

Открывается реклама через какое-то время - Удаление вирусов
Вчера случайно с файлообменника через ихний загрузчик установил пару не очень хороших программ таких как Амиго и Zaxar. Вроде-бы удалил их...

Лагают игры через какое-то время - Windows 7
Добрый день! У меня возникла проблема с игрой ( CS:GO ), то что она через какое то время начинает лагать(фризить),проседать fps до...

HTML5 - через какое время он станет актуальным? - HTML, CSS
Приветствую всех веб-дизайнеров. сегодня такой вопрос на повестке дня. Ни для кого не секрет что вышел HTML5. Уважаемые умные люди,...

Какое время будут показывать часы через... - C++
Текущее показание электронных часов: h часов (0 ≤ h ≤ 23) m минут (0 ≤ m ≤ 59) s секунд (0≤ k ≤ 59). Какое время будут показывать часы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru