標籤:
無序廣播:一條廣播發送出去,多個接收者接收沒有順序。
有序廣播:廣播接收者可以設定優先權,優先順序高的先收到廣播。
有序廣播可以設定優先權。
mainActivity.java
package com.sxt.day07_06;import android.os.Bundle;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity { ThirdReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registgerReceiver(); Intent intent=new Intent("com.sxt.day07_06.order_broadcast"); intent.putExtra("key", "hello java"); sendOrderedBroadcast(intent, null);//發送有序廣播 } //註冊第三層級的廣播接收者,第一第二層級的廣播接收者在系統說明檔案中註冊, private void registgerReceiver() { mReceiver=new ThirdReceiver(); IntentFilter filter=new IntentFilter("com.sxt.day07_06.order_broadcast");//com.sxt.day07_06.order_broadcast廣播的字串 filter.setPriority(600);//設定優先權 registerReceiver(mReceiver, filter); } //java定義的第三層級的廣播接收這 class ThirdReceiver extends BroadcastReceiver{ public void onReceive(Context context, android.content.Intent intent) { Log.i("main","ThirdReceiver.onReceive()"); }; } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver);//銷毀的時候取消註冊的廣播接收者,釋放資源。 }}
第一個廣播接收者:
package com.sxt.day07_06;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class FirstReceiver extends BroadcastReceiver { @Override //優先順序第一的廣播接收者 public void onReceive(Context context, Intent intent) { String value=intent.getStringExtra("key");//mainActivity的字串 Log.i("main","FirstReceiver.onReceive():"+value); setResultData("來源於FirstReceiver的文本");//向第二層級的廣播接收者發送字串, }}
第二個廣播接收者:
package com.sxt.day07_06;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class SecondReceiver extends BroadcastReceiver { @Override //優先順序第二的廣播接收者 public void onReceive(Context context, Intent intent) { String value=intent.getStringExtra("key");//mainActivity的字串 String text=getResultData();//第一層級廣播接收者發過來的資料 Log.i("main","SecondReceiver.onReceive(),intent中攜帶的文本:"+value+","+text); if(isOrderedBroadcast()){//如果收到的廣播是有序廣播 abortBroadcast();//終止廣播 } }}
系統描述檔案:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sxt.day07_06" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.sxt.day07_06.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.sxt.day07_06.FirstReceiver"> 註冊廣播接收者 <intent-filter android:priority="800"> <action android:name="com.sxt.day07_06.order_broadcast"/> </intent-filter> </receiver> <receiver android:name="com.sxt.day07_06.SecondReceiver"> <intent-filter android:priority="700"> <action android:name="com.sxt.day07_06.order_broadcast"/> </intent-filter> </receiver> </application></manifest>
android 51 有序廣播