Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基礎知識之broadcast廣播詳解

Android基礎知識之broadcast廣播詳解

編輯:關於Android編程

Android中的廣播用的太多了,今天稍微總結一下。
按注冊方式分為兩種:

1.靜態注冊廣播:
靜態注冊廣播就是在androidManifest.xml文件中注冊廣播,假設我們要實現這樣一個效果,在一個activity上點擊按鈕,發送一條廣播,這條廣播彈出一個toast,顯示“靜態”二字。

先看看廣播接受者:

public class MyBroadcast extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    Toast.makeText(context,"靜態", Toast.LENGTH_LONG).show();
  }

}

清單文件中注冊:

  <receiver android:name="com.example.staticbroadcast.MyBroadcast" >
      <intent-filter>
        <action android:name="com.test.StaticBroadcast" />
      </intent-filter>
    </receiver>

activity中的點擊事件(發送廣播):

 this.static_btn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction("com.test.StaticBroadcast");
        sendBroadcast(intent);
      }
    });

2.動態注冊:
動態注冊一般是在activity中的onStart()方法中注冊,在onStop()方法中解除注冊,代碼如下:

public class MainActivity extends Activity {

  private Button static_btn;
  private Button dynamic_btn;
  private BroadcastReceiver myBroadcastReceiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.static_btn = (Button) this.findViewById(R.id.button1);
    this.dynamic_btn = (Button) this.findViewById(R.id.Button01);
    myBroadcastReceiver = new BroadcastReceiver(){

      @Override
      public void onReceive(Context context, Intent intent) {
        Toast.makeText(MainActivity.this,"你好,這裡是動態廣播!", Toast.LENGTH_LONG).show();
      }

    };

//   this.static_btn.setOnClickListener(new OnClickListener() {
//
//     @Override
//     public void onClick(View v) {
//       Intent intent = new Intent();
//       intent.setAction("com.test.StaticBroadcast");
//       sendBroadcast(intent);
//     }
//   });

    this.dynamic_btn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        //發送廣播
        Intent intent = new Intent();
        intent.setAction("DynamicBroadcast");
        sendBroadcast(intent);
      }
    });
  }

  @Override
  protected void onStart() {
    super.onStart();
    //注冊廣播
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("DynamicBroadcast");
    registerReceiver(myBroadcastReceiver, intentFilter);

  }

  @Override
  protected void onStop() {
    super.onStop();
    //取消注冊
    unregisterReceiver(myBroadcastReceiver);
  }
}

關於靜態注冊的細節:
android:exported=”true”這個屬性表示該廣播接收器是否接收來自其他App發出的廣播,如果有intent-filter屬性,則默認為true,否則默認為false。

每個廣播接收者都可以接受多個廣播源,如果是靜態注冊,那麼你要這麼做:

  <receiver 
      android:exported="true"
      android:name="com.example.staticbroadcast.MyBroadcast" >
      <intent-filter>
        <action android:name="com.test.StaticBroadcast" />
        <action android:name="com.test.StaticBroadcast2"/>
      </intent-filter>
    </receiver>

在廣播接收器中這樣處理:

  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("com.test.StaticBroadcast")) {
      Toast.makeText(context, "靜態", Toast.LENGTH_SHORT).show();
    } else if (intent.getAction().equals("com.test.StaticBroadcast2")) {
      Toast.makeText(context, "靜態2", Toast.LENGTH_SHORT).show();
    }
  }

如果是動態注冊,注冊方式如下:

  @Override
  protected void onStart() {
    super.onStart();
    //注冊廣播
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("DynamicBroadcast");
    intentFilter.addAction("DynamicBroadcast2");
    registerReceiver(myBroadcastReceiver, intentFilter);

  }

廣播接收器中的處理方式與靜態注冊一致。

關於怎樣使用broadcast實現activity和fragment之間的通信可以查看我的另一篇博客使用Broadcast實現android組件之間的通信

原文地址:http://blog.csdn.net/u012702547/article/details/46955787

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved