ONdroid
19Окт/1011

Пример использования 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 - то увидим оповещение об этом.

Toast message вызванное при помощи broadcast receiver

Рассмотрим подробнее что же мы сотворили. Для начала рассмотрим как задается 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. Все права защищены.

Похожие статьи:

  1. Основные понятия Android приложений
  2. Пишем приложение под Android. Часть 2 – меню.

Автор: MinoS

Комментарии (11) Пинги (2)
  1. Hint: BrodcastReciever можно решистрировать в системе без описания в AndroidManifest.xml.

  2. Очень суперская статья!!! Админ делайте статьи в том же духе!

  3. Спасибо большое за актуальную статью. Так держать! от меня твит )

  4. Спасибо за статью. Вас незатруднит выложить исходники ?

  5. Скажите, как можно из BroadcastReceiver работать с методами и элементами запущенной службы? Например, для обновления данных через определённый промежуток времени.

  6. Спасибо за статью! У меня только небольшие замечания к коду. Класс 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();
    }
    }
    }


Комментировать