Broadcast Receiver в Android

Работа приложений в фоне осуществляется благодаря BroadcastReceiver и Service.
BroadcastReceiver это объект, который начинает выполнять действия, по получению какого нибудь сигнала (Intent). Service в отличии от BroadcastReciever работает сразу после того как его запустили. Сегодня речь пойдет о Broadcast Receiver.

Для создания броадкастера нужно создать класс, который наследуется от BroadcastReceiver и переопределить метод onReceive. Этот метод вызывает, когда броадкастер получает Intent.
В нашем примере броадкастер будет показывать всплывающее сообщение, конечно там можно сделать что-то более полезное.
public class SimpleBroadcater extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Toast.makeText(context,"Broadcaster",Toast.LENGTH_SHORT).show();  }


Броадкастер может слушать системные Intent, которые рассылаются всем и те которые мы будем вручную ему посылать. Теперь надо зарегестрировать броадкастер в системе это возможно сделать двумя способами созданием тега в манифесте приложения или вызовом метода registerReceiver из контекста, мы сделаем первым способом.
Посылка интентов броадкастерам осуществляется так
public class MainActivity extends Activity {

  Context context;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    context = getApplicationContext();

    Button button = (Button) findViewById(R.id.btn1);
    button.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        context.sendBroadcast(new Intent(context,SimpleBroadcater.class));
      }
    });
  }}

Также можно подписаться на системные интенты, для этого в манифесте надо использовать тег так.
<receiver android:name=".SimpleBroadcater" android:label="Simple">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
      </intent-filter>
    </receiver>

исходники проекта тут
  • +2
  • 03 октября 2010, 23:09
  • Mecid
  • 3