廣播分類

廣播分為有序廣播和無序廣播

  • 有序廣播
    所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,但是是有先后順序的,按照廣播接收者的優(yōu)先級排序.
  • 無序廣播
    所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,并且是沒有先后順序的,視為同時收到
有序廣播
  • sendOrderedBroadcast發(fā)送
  • 可以添加最終廣播接收者,最終廣播接收者resultReceiver:不需要在清單文件中配置,這個廣播接收者只接收該條有序廣播,并且是最后一個收到該廣播,并且一定可以接收到,即便被攔截
發(fā)出廣播
public class MainActivity extends AppCompatActivity {

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


    public void click(View v) {
        Intent intent = new Intent();
        intent.setAction("orderlyBroadcast");

        //發(fā)送有序廣播
        //sendOrderedBroadcast(intent, null, null, null, 0, "每人發(fā)100W", null);

        //最終廣播接收者resultReceiver:不需要在清單文件中配置,這個廣播接收者只接收該條有序廣播,并且是最后一個收到該廣播,并且一定可以接收到,即便被攔截
        sendOrderedBroadcast(intent, null, new MyResultReceiver(), null, 0, "每人發(fā)100W", null);
    }

    class MyResultReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String str = getResultData();
            System.out.println("最終結(jié)果:" + str);
        }
    }
}
接收者
  • 優(yōu)先級 android:priority="300" 范圍-1000 至 1000 1000為最高
  • 阻止廣播 abortBroadcast(),對于最終接收者來說,無效.
<receiver
    android:name=".LevelOneReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="1000">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelTwoReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="600">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelThreeReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="300">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>
public class LevelOneReceiver extends BroadcastReceiver {
    public LevelOneReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL ONE:" + str);

        //修改廣播內(nèi)容
        setResultData("每人發(fā)80W");
    }
}
public class LevelTwoReceiver extends BroadcastReceiver {
    public LevelTwoReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL TWO:" + str);
        //阻止廣播后,優(yōu)先級低的則收不到了,但最終廣播接收者一定會收到.
        abortBroadcast();
    }
}
public class LevelThreeReceiver extends BroadcastReceiver {
    public LevelThreeReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL THREE:" + str);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 現(xiàn)實(shí)中的廣播:電臺為了傳達(dá)一些消息而發(fā)送廣播,通過廣播攜帶要傳達(dá)的消息,群眾只要買一個收音機(jī),就可以收到廣播了。 ...
    stevewang閱讀 4,381評論 0 8
  • 廣播接收器 是Android的四大組件之一,可見廣播在Android中的重要性; 1. 什么是廣播? 廣播(Bro...
    Lost_Robot閱讀 2,057評論 2 10
  • 使用Android手機(jī)的時候,我們的手機(jī)管家中經(jīng)常會出現(xiàn)開機(jī)自啟動某某app,那么對于這個某某APP來說,他是怎么...
    徐愛卿閱讀 6,182評論 8 14
  • 廣播(掌握) 廣播的概念現(xiàn)實(shí):電臺通過發(fā)送廣播發(fā)布消息,買個收音機(jī),就能收聽Android:系統(tǒng)在產(chǎn)生某個事件時發(fā)...
    法神趙日天閱讀 443評論 0 2
  • 今天有點(diǎn)累。 我從不承認(rèn)自己是個憤青,我一度是一個喜歡置身事外的不負(fù)責(zé)任的人,后來我將這種心態(tài)歸結(jié)為幼稚和自欺欺人...
    短魚閱讀 263評論 1 2

友情鏈接更多精彩內(nèi)容