Android基礎(chǔ)-四大組件之Broadcast廣播(基礎(chǔ))

Android四大組件分別為:1.活動Activity骆膝,2.服務(wù)Service,3.廣播接收器Broadcast Receiver,4.內(nèi)容提供器Content Provider

廣播概念與分類

廣播概念:
廣播顧名思義是起通知作用的一種組件。在Android中荒辕,廣播十分靈活,它不僅可以源于系統(tǒng)級別的通知犹褒。也可源于其他應(yīng)用程序抵窒。某個(gè)app可以對自己想要接受的廣播進(jìn)行注冊。應(yīng)用程序接受廣播則需要使用廣播接收器Broadcast Receiver叠骑;

廣播分類:①標(biāo)準(zhǔn)廣播 ②有序廣播

①標(biāo)準(zhǔn)廣播Normal Broadcast:是一種異步執(zhí)行的廣播李皇,廣播一經(jīng)發(fā)出,所有廣播接收器幾乎都在同一時(shí)間接收此廣播座云,沒有先后順序疙赠。這種廣播特點(diǎn):異步執(zhí)行付材,效率高朦拖,無法攔截。Android系統(tǒng)提供的許多系統(tǒng)級別的廣播如開機(jī)廣播厌衔,電量變化廣播璧帝,時(shí)間變化廣播,網(wǎng)絡(luò)變化廣播等都是標(biāo)準(zhǔn)廣播富寿。

②有序廣播Ordered Broadcast:是一種同步執(zhí)行的廣播睬隶,廣播發(fā)出后锣夹,同一時(shí)刻只有一個(gè)廣播接收器接收此廣播,當(dāng)這個(gè)廣播接收器處理完邏輯之后苏潜,廣播才會繼續(xù)傳播银萍。此外,廣播接收器接收后可攔截恤左,使排在后面的廣播接收器無法接受此廣播贴唇。這種廣播特點(diǎn):同步執(zhí)行,效率高飞袋,可攔截戳气。

發(fā)送與接受自定義廣播

上邊概念中提到,接受廣播需要用到廣播接收器Broadcast Receiver巧鸭,并且需要對想接收的廣播進(jìn)行注冊瓶您。作為四大組件之一的廣播,同其他組件:活動Activity,服務(wù)Service,內(nèi)容提供器Content Provider同樣在使用前需注冊纲仍。

特別的是呀袱,注冊廣播有兩種方式:①靜態(tài)注冊 ②動態(tài)注冊

①靜態(tài)注冊與接受廣播:在AndroidManifest.xml文件中注冊。
首先如圖所示新建一個(gè)廣播接收器巷折,項(xiàng)目包右鍵>new>other>Broadcast Receiver压鉴。

新建一個(gè)廣播接收器

為新建的廣播接收器命名,類似于新建服務(wù)Service時(shí)一樣锻拘,Exported表示是否允許此廣播接收器接受本程序以外的廣播油吭,Enabled表示是否啟用此廣播,語言選擇java或kotlin署拟。


設(shè)置廣播接收器

這是編譯器自動生成的最初的代碼:

package com.lipiao.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

該類繼承自BroadcastReceiver類婉宰,重載了一個(gè)onReceive方法,如同自動加載出來的注釋所言推穷,onReceive()方法是當(dāng)廣播接收器接受廣播時(shí)調(diào)用心包,我們接受廣播后的邏輯處理代碼就可以寫在onReceive()方法中了。
接下來看看AndroidManifest.xml文件中的注冊信息:

 <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true"></receiver>

接下來稍微改改代碼馒铃,實(shí)現(xiàn)接受自定義的廣播蟹腾。

在receiver標(biāo)簽下添加相應(yīng)的action如下,添加一個(gè)叫myAction的自定義廣播区宇。

 <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action  android:name="myAction"/>
            </intent-filter>
        </receiver>

在MyReceiver類中接受并打印日志信息:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
    String TAG ="MyReceiver";
   @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: 已接受自定義廣播");
    }
}

使用Intent發(fā)送廣播:

 Intent intent =new Intent("myAction");
        sendBroadcast(intent);

廣播發(fā)送成功娃殖,日志信息打印如下:


廣播發(fā)送成功后的日志信息

②動態(tài)注冊:在代碼中使用registerReceiver()方法注冊。

同樣是對于上邊那個(gè)名為myAction的自定義廣播進(jìn)行鼎動態(tài)注冊:

//動態(tài)注冊廣播
    private IntentFilter intentFilter;
    private  MyReceiver myReceiver;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("myAction");
        myReceiver=new MyReceiver();
        registerReceiver(myReceiver,intentFilter);
        }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注冊
        unregisterReceiver(myReceiver);
    }

需要注意的是议谷,動態(tài)注冊的廣播需要取消注冊炉爆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芬首,更是在濱河造成了極大的恐慌赴捞,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郁稍,死亡現(xiàn)場離奇詭異赦政,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耀怜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門昼钻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人封寞,你說我怎么就攤上這事然评。” “怎么了狈究?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵碗淌,是天一觀的道長。 經(jīng)常有香客問我抖锥,道長亿眠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任磅废,我火速辦了婚禮纳像,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拯勉。我一直安慰自己竟趾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布宫峦。 她就那樣靜靜地躺著岔帽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪导绷。 梳的紋絲不亂的頭發(fā)上犀勒,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機(jī)與錄音妥曲,去河邊找鬼贾费。 笑死,一個(gè)胖子當(dāng)著我的面吹牛檐盟,可吹牛的內(nèi)容都是我干的褂萧。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼遵堵,長吁一口氣:“原來是場噩夢啊……” “哼箱玷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陌宿,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤锡足,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后壳坪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舶得,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年爽蝴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沐批。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝎亚,死狀恐怖九孩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情发框,我是刑警寧澤躺彬,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站梅惯,受9級特大地震影響宪拥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铣减,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一她君、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葫哗,春花似錦缔刹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酿秸,卻和暖如春灭翔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辣苏。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工肝箱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稀蟋。 一個(gè)月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓煌张,卻偏偏與公主長得像,于是被迫代替她去往敵國和親退客。 傳聞我的和親對象是個(gè)殘疾皇子骏融,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

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