Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
kpoxaa
74 / 35 / 1
Регистрация: 03.08.2012
Сообщений: 447
#1

Намерение от action ".BATTERY_LOW" приходит с задержкой - Программирование Android

26.06.2014, 16:41. Просмотров 724. Ответов 6
Метки нет (Все метки)

Ситуация следующая:

Задача:
Когда андройд отображает диалог "Осталось 15% нэргии", мне нужно перехватить это событие, чтобы провести нужные мне манимуляции в программе.

Я создал класс и унаследовал его от BroadcastReceiver. Зарегистрировал ресивер в манифесте и подписал его на android.intent.action.BATTERY_LOW.

XML
1
2
3
4
5
<receiver android:name="com.niixon.battery.BatteryChangerReciver">
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_LOW"/>
            </intent-filter>
</receiver>
Проблема:
В момент отображения диалога "Осталось 15% нэргии" в метод моего класса onReceive() ничего не приходит. Но все же приходит... где-то через 5 - 20 секунд, а то и больше.

Тоесть мой ресивер не принимает сообщение в момент отображения диалога, а принимает на какой-то промежуток времени больше.


Подскажите пожалуйста, как это можно побороть? Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 16:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Намерение от action ".BATTERY_LOW" приходит с задержкой (Программирование Android):

Узнать на каком % зарядки, текущее устройство вызовет action "BATTERY_LOW"
Подскажите пожалуйста. Как узнать, на каком % заряда аккумулятора, текущее...

Установить стрелку "назад" в action bar, что бы возвращаться к первому фрагменту
Добрый день.Это снова я) И новый вопрос, есть активити и несколько...

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры"
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Unknown method 'e' of 'org.apache.commons.logging.Log' package...

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на...

Выбор платформы разработки "1С Мобильная платформа" или "Android Studio"
Всем, здравствуйте! Есть задача по разработке клиента для терминала сбора...

6
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
27.06.2014, 11:52 #2
Цитата Сообщение от kpoxaa Посмотреть сообщение
Подскажите пожалуйста, как это можно побороть? Спасибо.
Я бы попробовал ради эксперимента создать и зарегистрировать BroadcastReceiver прямо в коде вашего сервиса или активити. Что-то мне подсказывает что работать будет гораздо быстрей.
0
kpoxaa
74 / 35 / 1
Регистрация: 03.08.2012
Сообщений: 447
27.06.2014, 11:57  [ТС] #3
Спасибо, сейчас попробую. Отпишусь.

п.с
Но сама фишка ситуации в том, что на одном дивайсе все ок, приходит сразу, а на другом с задержкой.
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
27.06.2014, 12:56 #4
Цитата Сообщение от kpoxaa Посмотреть сообщение
Но сама фишка ситуации в том, что на одном дивайсе все ок, приходит сразу, а на другом с задержкой.
Может просто девайс тормозной?
Или на нем куча приложений которые зарегистрировали бродкаст ресивер принимающие такой интент, и поэтому пока система отправляет им всем этот интент, возникает большая задержка (ну это теория )
0
kpoxaa
74 / 35 / 1
Регистрация: 03.08.2012
Сообщений: 447
27.06.2014, 13:04  [ТС] #5
Очень надеюсь, что это только с этим девайсом и будет мало таких) Сейчас ждем пока разредяться все андройды... чтобы начать проверять на всех девайсах этот баг. Как не надо разрежаются моментально...
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
27.06.2014, 18:20 #6
Меня тоже заинтересовала эта тема...
Только я ловлю ЭТО:
<action android:name="android.intent.action.BOOT_COMPLETED"/>
Успешно получал на 3-5ти устройствах.
Каждое изменение % (98->97).
Иногда несколько реакций на процент...
Если у Вас не будет зависать на "глючном" устройстве то сможете написать свой реактор на любой % - 10, 15, 20...
Тоже не хотел бы узнать что моя программа где-то не сработает!
Отпиштесь о результатах!
1
kpoxaa
74 / 35 / 1
Регистрация: 03.08.2012
Сообщений: 447
27.06.2014, 20:29  [ТС] #7
И так, после продолжительных тестов и мучений(пытались воспроизводить диалог о нехватке энергии в реальных условиях) получили следующие данные:

1. Приложение было подписано на action ".BATTERY_LOW", тоесть action посылается системой каждый раз, когда происходит мониторинг заряда аккумулятор и заряд меньше чем com.android.internal.R.integer.config_lowBatteryWarningLevel. (При этом событии должен вызываться диалог "Аккумулятор разряжен")

2. Тест на устройставах версии 2.3 и 3.1 - успешно пройден. Наш ресивер ловил намерение пришедшее по зарегистрированному action-у и приходило это намерение вместе с отображением на дисплее далога "Аккумулятор разряжен". То что нам и нужно было. Словить намерение в момент выбрасывания системой диалога.

3. Тест на устройствах 4. + - провален. Ресивер ловил намерение, но ловил он его то позже отображения диалога, то намного раньше. Получилось так, что пришедшее намерение не было никак связано с отображением диалога на дисплей. От этого способа пришлось отказаться.

Решение: т.к в нашей ситуации нужно было поставить игру на пауз в тот момент, когда диалог перекрывает приложение, решили пойти на небольшую хитрость, и переопределили метод Activity::onWindowFocusChanged(boolean hasFocus). Это метод срабатывает каждый раз, когда наша активити получает фокус и теряет его. В момент потери фокуса мы ставим игру на паузу. Оказалось очень просто и удобно.

Всем спасибо :)
1
27.06.2014, 20:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 20:29
Привет! Вот еще темы с решениями:

При эмулировании вместо надписи "Hello world" отображается "android"
Привет форумчане! Я только-только начинал программировать на андроиде. Поставил...

Как "превратить" string "6.971245e-001" во float?
Число конечно пример

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

Что означают конструкции "finally" и "throw new"?
Я с Java уже давно, но с этим столкнулся в первый раз. Объясните, пожалуйста,...


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

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

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