自定義廣播

安卓允許用戶發(fā)送自定義廣播(broadcast),滿足接收條件的接收器(receiver)就可以接受自定義廣播。

發(fā)送自定義廣播

自定義廣播分為標(biāo)準(zhǔn)(無序)自定義廣播以及有序自定義廣播:

sendBroadcast(Intent intent); //發(fā)送標(biāo)準(zhǔn)自定義廣播
sendOrderedBroadcast(Intent, null); //發(fā)送有序自定義廣播

標(biāo)準(zhǔn)自定義廣播是任何滿足條件的接收器都可以接受。
有序自定義廣播的第二個參數(shù)是接受權(quán)限,一般為null。有序廣播接收器可以設(shè)置接收優(yōu)先級priority,優(yōu)先級高的先收到廣播,并且可以設(shè)置截斷廣播,這樣之后的接收器就無法接受廣播。

接受自定義廣播

接受自定義廣播一般使用靜態(tài)接受,即在AndroidManifest.xml中注冊接收器,這樣應(yīng)用即使未運(yùn)行,也可以響應(yīng)廣播:

<manifest>
    ......
    <application>
        ......
        <receiver android:name=".MyBroadcast(接收器類)">
            <intent-filter android:priority="100(優(yōu)先級)">
                <action android:name="MY_BROADCAST(自定義的廣播)" />
            </intent-filter>
        </receiver>
        ......
    </application>
</manifest>

示例

我們新建2個工程:BroadcastTest1和BroadcastTest2。BoardcastTest1的主活動中添加一個按鈕發(fā)送自定義的廣播"Example.MY_Broadcast",然后兩個工程中都添加接收器用來接收這個廣播,接收后彈出toast通知。項目1的toast要比項目2的先提示。
先來寫項目1發(fā)送廣播,發(fā)送廣播要利用Intent類的實(shí)例,如下:

//BroadcastTest1.MainActivity: 項目1的主活動發(fā)送廣播
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ... ...
        Button button =(Button)findViewById(R.id.button_broadcast);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("Example.MY_BROADCAST");
                sendOrderedBroadcast(intent, null);
            }
        });
        ... ...
    }
}

第一個項目的接收器類,繼承BroadcastReceiver并重寫其中的onReceive()方法,這個方法就是接收器接收到廣播后要執(zhí)行的,注意的是不要寫太多內(nèi)容,如果onReceive()方法執(zhí)行時間過長會報錯:

//BroadcastTest1.MyBroadcastReceiver:項目1的接收器類
public class MyBoardcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "BroadcastTest1:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;
    }
}

之后要在項目1的主配置文件中注冊接收器,并設(shè)置優(yōu)先級為100:

<!--BraodcastTest1.AndroidManifest.xml-->
<manifest ......>
    <application ......>
        ......
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter android:priority="100">
                <action android:name="Example.MY_BROADCAST" />
            <intent-filter>
        </receicer>
        ......
    </application>
</manifest>

接下來寫項目2的接收器,基本上與項目1相同,不過我們不設(shè)置優(yōu)先級,這樣一定會先提示項目1的toast。如下:

//BroadcastTest2.MyBroadcastReceiver:項目2的接收器類
public class MyBoardcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "BroadcastTest2:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;
    }
}
<!--BraodcastTest2.AndroidManifest.xml-->
<manifest ......>
    <application ......>
        ......
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="Example.MY_BROADCAST" />
            <intent-filter>
        </receicer>
        ......
    </application>
</manifest>

編譯下兩個工程測試吧,項目中其他的部分請自行完善。另外,一些非原生安卓ROM實(shí)現(xiàn)靜態(tài)接受廣播需要給應(yīng)用“自動運(yùn)行”權(quán)限。

關(guān)于截斷廣播

截斷廣播在接收器類中使用abortBroadcast()方法,我們修改項目1的接收器類,加上這個方法:

//BroadcastTest1.MyBroadcastReceiver:項目1的接收器類
public class MyBoardcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "BroadcastTest1:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;
        abortBroadcast();
    }
}

再次編譯項目1測試,這次只有項目1的toast通知,沒有項目2的toast通知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內(nèi)容

  • 現(xiàn)在你已經(jīng)學(xué)會了通過廣播接收器來接受系統(tǒng)廣播,接下來我們就要學(xué)習(xí)一下如何在應(yīng)用程序中發(fā)送自定義廣播。前面已經(jīng)介紹過...
    AndYMJ閱讀 3,407評論 4 0
  • 發(fā)送自定義廣播 廣播分類:標(biāo)準(zhǔn)廣播、有序廣播標(biāo)準(zhǔn)廣播:所有程序都可以同時接收到(完全異步執(zhí)行) 有序廣播:優(yōu)先級高...
    溪_午閱讀 195評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • adb發(fā)送廣播 adb shell am broadcast -a action的名字,即配置文件中action的...
    nicoleandlili閱讀 14,799評論 0 3
  • 金圣嘆,死后其名得以揚(yáng)天下。后有謗者,有譽(yù)者,謗者謂之大邪,譽(yù)者謂之大才。今我讀之,有感如下: 史料記載(錢謙益的...
    長了翅膀的貓閱讀 629評論 0 0