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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
#1

Как поучить/передать данные в/из BroadcastReceiver ? - Android

02.03.2013, 14:32. Просмотров 2789. Ответов 12
Метки нет (Все метки)

Например, есть BroadcastReceiver и есть Сервис.
BroadcastReceiver получает различные ресиверы от системы (типа android.intent.action.PHONE_STATE).
Сервис иногда взаимодействует из BroadcastReceiverом, так вот вопрос, каким образом он взаимодействует?
Я видел много примеров, где для передачи или получения каких-то данных в/из BroadcastReceiver посылаются свои ресиверы. Я немогу понять зачем это? не проще сделать public static переменную и к ней обращатся как с ресивера так и сервиса??

ну например,
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
public class MyReceiver extends BroadcastReceiver {
    public static String action = null;
    public static String command = null;
    
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        action = intent.getAction();
        if(command != null){
            //command set.. todo
        }
    }
 
}
 
public class MyService extends Service {
    
    public void onCreate() {
        if(MyReceiver.action == null){
            //action null ...
        }
        else{
            //action set ...
        }
    }
}
можно же так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2013, 14:32     Как поучить/передать данные в/из BroadcastReceiver ?
Посмотрите здесь:

Android Как передать intent данные в Service?
Android Как передать данные в EditText
Android Как заставить работать BroadcastReceiver?
Как запустить метод в Activity из BroadcastReceiver Android
Как узнать что BroadcastReceiver сообщение зарегистрировано? Android
Android Как передать в функцию название массива в который будут грузиться данные из файла?
Android Как передать данные в определенный инстанс класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 16:50     Как поучить/передать данные в/из BroadcastReceiver ? #2
а как сервису/ресиверу узнать когда нужно эту переменную проверить?)

Добавлено через 12 минут
а броткаст ресивер не может сервис забиндать?
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
02.03.2013, 18:44  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #3
ну ситуация может быть такая, сервис изменяет переменную в ресивере, потом инициирует броадкаст телефоном... т.е. броадкаст шлет именно телефон, а не сервис.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 19:21     Как поучить/передать данные в/из BroadcastReceiver ? #4
Цитата Сообщение от elf32 Посмотреть сообщение
потом инициирует броадкаст телефоном... т.е. броадкаст шлет именно телефон, а не сервис.
что?Oo

Добавлено через 39 секунд
в сам бродкаст можно данные засунуть.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
02.03.2013, 19:54  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #5
А что ОО?
В сервисе, например, делаем вызов:
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:111"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

Таким образом, броадкаст шлет не наш сервис. А ресивер получает броадкаст android.intent.action.PHONE_STATE

Добавлено через 1 минуту
А ситуация напрмиер такая, ресивер ловит ВСЕ броадкасты PHONE_STATE, а вот если например звонок был иницирован нашим приложением, то мы уведомляем ресивер путем изменения static переменной.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 21:14     Как поучить/передать данные в/из BroadcastReceiver ? #6
просто шлите обычный броткаст.

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

Добавлено через 2 минуты
а то, что вы засунете в свой интент система не копирует в броткаст?

Добавлено через 4 минуты
может этот же интент и используется для броткаста?
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
02.03.2013, 21:31  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #7
V0v1k, вы в своем репертуаре причем тут интент? я просто пример написал!!! инициировать broadcast может вообще другое приложение, а в нашем приложении, например, просто пользователь сам указал, что нужно что-то делать. Например, пользователь указал в нашем приложении, что он сейчас совершит звонок, соответствуенно у нас нет интента, а мы просто отмечаем в ресивере, что сейчас будет итти именно тот звонок что нам нужен.

Я не ищу решения конкретных задач, я просто хочю понять почему нужно сделать именно так, а не как-то по другому.

если делать как вы, то между изменением статик переменной и приходом нужного броткаста может прити и не нужный броткаст.
ну так пусть и приходит. зачем он нам? нам например, нужно по другому обработать только те бродкасты которые будут поступать после изменения static переменной.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 21:58     Как поучить/передать данные в/из BroadcastReceiver ? #8
ну так и напишите что нужен просто идентификатор ловить броткасты или нет.

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

всегда пишите конкретную ситуацию...

Добавлено через 16 секунд
для каждой ситуации свои подходы.

Добавлено через 4 минуты
нет универсальный подходов на все случаи жизни....
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
02.03.2013, 22:10  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #9
а то я подумал что нужно словить именно то и только тот, что вы отослали после изменения статик переменной, вот и сказал, что между изменением статика и отправки нужного броткаста может придти ненужный и будет воспринят как нужный, а нужный проигнорируется.
Этому есть место быть. Но какая раница, что мы изменим static переменную, что отошлем свой бродкаст с уведомлением что сейчас будет нужный бродкаст??
Напрмер, вместо изменения статик переменной, мы отправляем броадкаст с извещанием что сейчас придет именно тот броадкаст что нам нужен, но пока мы инициируем отправку нужного броадкаста, уже кто-то другой его отправил и ресивер получит не тот бродкаст. не так ли?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 22:14     Как поучить/передать данные в/из BroadcastReceiver ? #10
Цитата Сообщение от elf32 Посмотреть сообщение
Напрмер, вместо изменения статик переменной, мы отправляем броадкаст с извещанием что сейчас придет именно тот броадкаст что нам нужен, но пока мы инициируем отправку нужного броадкаста, уже кто-то другой его отправил и ресивер получит не тот бродкаст. не так ли?
нет, мы уже в нужный броткаст запихам флажек аля "да, я тот самый нужный броткаст, обработай меня" и уже никто не вклинится.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
02.03.2013, 22:44  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #11
Не, ну это понятно, если в самом броадкасте будет флаг, что это именно тот броадкаст, то да.
Но я рассматриваю пример, когда броадкаст шлет другое приложение, а нашему сервису нужно уведомить нашего ресивера когда и какой бродкаст нужно ловить.
Я имею ввиду броадкаст-уведомление от сервиса ресиверу, что сейчас нужно начать ловить броадкаст который придет не от нас (всё тот же пример со звонком).
Какая разница, что сервис отправит броадкаст-уведомление, что изменит статик переменную? - веть посля этого, пока мы будем инициировать отправку броадкаста другим приложением, там уже может прийти другой броадкаст.

Вот например, http://commandus.com/blog/?p=58 - обработка ussd запросов.
Там для начала перехвата ussd запроса, отправляется свой броадкаст со спец камандами
MAGIC_ON = ":ON"
MAGIC_OFF = ":OFF;("
а почему просто не изменить статик переменную с флагом, что сейчас пойдет наш запрос? а данные запроса сохранить также в статик переменных?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 22:51     Как поучить/передать данные в/из BroadcastReceiver ? #12
не смотрел пример, но это полезно если при изменении ON на OFF нужно не только флажек изменить, а еще и выполнить что-то, или если есть несколько инстансов перехватчика, ведь статик переменная она общая для всех инстансов класа. другии причины на ум не приходят сейчас...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 00:30     Как поучить/передать данные в/из BroadcastReceiver ?
Еще ссылки по теме:

Уведомления в BroadcastReceiver Android
Как передать данные из Fragments в DialogFragment Android
BroadcastReceiver Android
Как передать данные в thread? Android
Android Как передать данные в Activity из другого класса

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

Или воспользуйтесь поиском по форуму:
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
03.03.2013, 00:30  [ТС]     Как поучить/передать данные в/из BroadcastReceiver ? #13
ок. я понял. нужно смотреть по ситуации. спасибо.
Yandex
Объявления
03.03.2013, 00:30     Как поучить/передать данные в/из BroadcastReceiver ?
Ответ Создать тему
Опции темы

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