среда, 15 сентября 2010 г.

Использование BroadcastReceiver в 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();
  }
* This source code was highlighted with Source Code Highlighter.


Броадкастер может слушать системные 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));
      }
    });
  }
}
* This source code was highlighted with Source Code Highlighter.


Также можно подписаться на системные интенты, для этого в манифесте надо использовать тег  так.

<receiver android:name=".SimpleBroadcater" android:label="Simple">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
      </intent-filter>
    <
/receiver>
* This source code was highlighted with Source Code Highlighter.


исходники проекта тут

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

Отправить комментарий