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

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

Войти
Регистрация
Восстановить пароль
 
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
#1

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

26.06.2014, 16:41. Просмотров 652. Ответов 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" - Программирование Android
Подскажите пожалуйста. Как узнать, на каком % заряда аккумулятора, текущее устройство выдаст сообщение &quot;Осталось 15% энэргии&quot;. ...

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

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

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log" - Программирование Android
Unknown method 'e' of 'org.apache.commons.logging.Log' package com.mycompany.myapp; import android.widget.*; import...

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов - Программирование Android
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на свой телефон с помощью android studio )) До этого все...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
angryrobot
Командир зеленых роботов
347 / 284 / 53
Регистрация: 08.10.2013
Сообщений: 564
27.06.2014, 11:52 #2
Цитата Сообщение от kpoxaa Посмотреть сообщение
Подскажите пожалуйста, как это можно побороть? Спасибо.
Я бы попробовал ради эксперимента создать и зарегистрировать BroadcastReceiver прямо в коде вашего сервиса или активити. Что-то мне подсказывает что работать будет гораздо быстрей.
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
27.06.2014, 11:57  [ТС] #3
Спасибо, сейчас попробую. Отпишусь.

п.с
Но сама фишка ситуации в том, что на одном дивайсе все ок, приходит сразу, а на другом с задержкой.
0
angryrobot
Командир зеленых роботов
347 / 284 / 53
Регистрация: 08.10.2013
Сообщений: 564
27.06.2014, 12:56 #4
Цитата Сообщение от kpoxaa Посмотреть сообщение
Но сама фишка ситуации в том, что на одном дивайсе все ок, приходит сразу, а на другом с задержкой.
Может просто девайс тормозной?
Или на нем куча приложений которые зарегистрировали бродкаст ресивер принимающие такой интент, и поэтому пока система отправляет им всем этот интент, возникает большая задержка (ну это теория )
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
27.06.2014, 13:04  [ТС] #5
Очень надеюсь, что это только с этим девайсом и будет мало таких) Сейчас ждем пока разредяться все андройды... чтобы начать проверять на всех девайсах этот баг. Как не надо разрежаются моментально...
0
Tester64
396 / 357 / 43
Регистрация: 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
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 20:29
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2014, 20:29
Ответ Создать тему
Опции темы

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