Android. Могу ли я отправить службе намерение об изменении состояния Wi-Fi?

Я хочу отправлять намерение моей службе каждый раз, когда изменяется состояние подключения к Wi-Fi.

Поэтому, когда я в настоящее время использую широковещательный приемник для прослушивания изменений состояния в Wi-Fi, поэтому, когда он получает намерение, я хочу иметь возможность отправлять эту информацию в свою службу.

Возможно ли это, и если да, то как правильно это сделать?


person Donal Rafferty    schedule 17.02.2010    source источник


Ответы (1)


Если служба будет работать в это время, вы можете просто зарегистрировать BroadcastReceiver в Service напрямую через registerReceiver().

В противном случае вызовите startService() из BroadcastReceiver, чтобы сообщить Service о событии, запустив Service, если он не запущен. Обязательно отключите этот Service в какой-то момент (например, используйте IntentService, который автоматически выключится, когда больше нечего будет делать).

person CommonsWare    schedule 17.02.2010
comment
Спасибо, это служба Sip, которая будет работать все время, периодически регистрируясь на сервере регистрации sip. У меня есть отдельный класс Wi-Fi, в котором есть широковещательные приемники для прослушивания изменений уровня RSSI и изменений подключения Wi-Fi. Я хотел бы сохранить это отдельно для службы Sip и просто сообщить службе Sip, когда Wi-Fi потерял соединение, чтобы прекратить попытки зарегистрироваться, и когда он установит соединение, попробуйте зарегистрироваться. - person Donal Rafferty; 17.02.2010
comment
Используйте первый шаблон — зарегистрируйте BroadcastReceiver для соответствующих трансляций в самом Service через registerReceiver(). Хранить это отдельно — это проблема кодирования, и она не должна диктовать вашу архитектуру Android. - person CommonsWare; 17.02.2010
comment
Итак, вы рекомендуете убрать приемники вещания из моего класса Wi-Fi и добавить их в Сервис? Итак, я хочу, чтобы класс Wifi прослушивал изменения, а затем сообщал нескольким различным службам и действиям об изменении, поэтому я подумал, что класс Wifi прослушивает изменения в одном месте, было бы лучше, чем множество широковещательных приемников в разных Услуги и деятельность? Итак, я думал об использовании пользовательских намерений? - person Donal Rafferty; 17.02.2010
comment
Вы постоянно меняете свою историю, из-за чего очень раздражает попытка помочь вам. Если ваш класс Wifi не будет выполнять сотни или тысячи строк бизнес-логики, каждый компонент, который заботится об изменениях состояния WiFi, также может иметь для них собственный прослушиватель. В конце концов, им понадобится собственный слушатель для ваших пользовательских намерений — все, что делает ваш класс Wifi, — это добавляет накладные расходы. Если класс Wifi будет выполнять много работы, возможно, эти накладные расходы оправданы, но я не могу сказать наверняка. Но не позволяйте компоненту получать намерения только для того, чтобы транслировать новые без дополнительных причин. - person CommonsWare; 17.02.2010
comment
Спасибо, прошу прощения за неясность, ваши знания очень ценятся - person Donal Rafferty; 17.02.2010
comment
@commonsware - мне нравится ваше замечание ... Но не позволяйте компоненту получать намерения только для того, чтобы транслировать новые без дополнительных причин .... Я думаю, что это хороший руководящий принцип (для всей разработки Android), который я пробовал передать на мою команду с небольшим успехом. - person mobibob; 19.05.2011