Пример использования Broadcast Receiver в Android
В очередной раз с любопытством изучая статистику посещения блога в Google Analytics я обнаружил, что наиболее частым поисковым запросом от пришедших читателей является запрос "Broadcastreceiver пример". Это и натолкнуло меня на мысль поднять недописанную тему о Broadcast receiver, и написать статейку в примерах. На этот раз мы напишем приложение, которое будет отслеживать состояние WiFi соединения с последующим уведомлением пользователя об его изменении =)
О понятии Broadcast receiver я упоминал в предыдущей статье. Пришло время опробовать его на практике. Создаем новый проект и принимаемся за дело !
Для начала давайте опишем наше приложение в AndroidManifest.xml. Следует объявить Broadcast receiver для слежения за состоянием WiFi соединения,а также дать приложению права на получение информации о состоянии WiFi соединения. Activity мы тоже опишем, но внутри него пока не будет никакой функциональной нагрузки =)
Итак, что у нас должно быть в AndroidManifest.xml:
Как видно из кода - нам нужно создать .java класс который будет обрабатывать сигналы получаемые от Broadcast receiver. Создаем класс WiFiStatusReceiver.java и вписываем в него следующие строки:
package com.broadcast.receiver.example; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiManager; import android.widget.Toast; public class WiFiStatusReceiver extends BroadcastReceiver { public static Context mContext; @Override public void onReceive(Context context, Intent intent) { if (mContext == null) mContext = context; final WifiManager wm = (WifiManager) mContext.getSystemService(mContext.WIFI_SERVICE); if (intent.getBooleanExtra(wm.EXTRA_SUPPLICANT_CONNECTED, true)) { Toast.makeText(context, "Wifi connected to network" , Toast.LENGTH_LONG).show(); } if (!intent.getBooleanExtra(wm.EXTRA_SUPPLICANT_CONNECTED, true)) { Toast.makeText(context, "Wifi disconnected from network" , Toast.LENGTH_LONG).show(); } } }
На самом деле "программу минимум" мы уже выполнили. Даже не запуская приложение - у нас теперь появится новый Broadcast receiver в системе. И если мы включим или выключим WiFi - то увидим оповещение об этом.
Рассмотрим подробнее что же мы сотворили. Для начала рассмотрим как задается Broadcast receiver в AndroidManifest.xml.
Каждому Broadcast receiver нужно присвоить имя - android:name=".WiFiStatusReceiver". Это имя должно соответствовать классу, который будет обрабатывать приходящие от Broadcast receiver Intents.
В <intent-filter> тегах задаются фильтры событий. В случае если событие соответствует одному из тех, что описаны между этими тегами, то срабатывает фильтр и вызывается класс-обработчик.
Теперь рассмотрим WiFiStatusReceiver.java класс. Важно помнить, что наследовать такие классы необходимо от BroadcastReceiver класса. Дальше мы используем очень удобный системный класс WiFiManager для определения состояния WiFi и сравниваем это значение с константами отвечающими за включенный и выключенный WiFi. В случае совпадения состояния и константы - выводится сообщение пользователю, при помощи Toast уведомлений (всплывающая полупрозрачная надпись).
Вот и все, самый простой пример работы Broadcast receiver готов. Сохраняем проект и пробуем запустить его на устройстве или эмуляторе.
© 2010 - 2013, ondroid.info. Все права защищены.
Похожие статьи:




Октябрь 19th, 2010 - 21:00
Hint: BrodcastReciever можно решистрировать в системе без описания в AndroidManifest.xml.
Октябрь 19th, 2010 - 22:48
Да, я в курсе, но пока пробовал только этот метод. Завтра постараюсь дополнить статью.
Ноябрь 1st, 2010 - 00:27
Очень суперская статья!!! Админ делайте статьи в том же духе!
Ноябрь 2nd, 2010 - 14:47
Спасибо, буду стараться =) Последнее время очень не хватает времени…
Ноябрь 10th, 2010 - 21:13
Спасибо большое за актуальную статью. Так держать! от меня твит )
Ноябрь 26th, 2010 - 11:44
Спасибо за статью. Вас незатруднит выложить исходники ?
Ноябрь 27th, 2010 - 23:30
Посмотрю – если сохранились, то выложу )
Декабрь 3rd, 2010 - 17:36
Скажите, как можно из BroadcastReceiver работать с методами и элементами запущенной службы? Например, для обновления данных через определённый промежуток времени.
Декабрь 6th, 2010 - 14:56
Для периодического выполнения действий лучше всего использовать AlarmManager. Хотя, возможно, я Вас не совсем понял )
Декабрь 20th, 2010 - 15:43
Спасибо за статью! У меня только небольшие замечания к коду. Класс WifiStatusReceiver можно упростить так:
public class WifiStatusReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, true)) {
Toast.makeText(context, "Wifi connected to network" , Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Wifi disconnected from network" , Toast.LENGTH_LONG).show();
}
}
}
Декабрь 20th, 2010 - 16:02
Да, ваш вариант кажется более компактным, спасибо ) Проверю и приведу к виду вашего варианта =)