標籤: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://www.cnblogs.com/lwbqqyumidi/p/4168017.html
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。
android開發之broadcast學習筆記