BroadcastReceiver

文章僅做個人筆記使用:

廣播可用作跨應用程序和普通用戶流之外的消息傳遞系統(tǒng)僻爽,廣播消息本身包裝在一個Intent對象中。該意圖還可以包括捆綁在其額外字段中的其他信息绰上。例如产喉,飛行模式意圖包括布爾附加值,指示布爾模式是否打開贝椿。
可以通過兩種方式接收廣播:通過清單聲明的接收者( 靜態(tài)注冊 )和上下文注冊的接收者( 動態(tài)注冊 )想括。

  • 靜態(tài)注冊:在清單中聲明了廣播接收者,則發(fā)送廣播時烙博,系統(tǒng)會啟動應用程序(如果該應用程序尚未運行)瑟蜈。在android8.0以后除了少數(shù)(例如:開機)隱式廣播外,不能使用靜態(tài)注冊的方式聲明隱式廣播接收方式渣窜。
    安裝應用程序后铺根,系統(tǒng)軟件包管理器將注冊接收者。接收者將成為應用程序的單獨入口點乔宿,這意味著系統(tǒng)可以啟動該應用程序并在當前未運行該應用程序的情況下傳送廣播位迂。

  • 動態(tài)注冊:通過registerReceiver(BroadcastReceiver, IntentFilter)進行注冊,通過unregisterReceiver(BroadcastReceiver)進行注銷予颤。
    上下文注冊的接收者只要其注冊上下文有效就可以接收廣播囤官。例如,如果您在Activity上下文中注冊蛤虐,則 只要活動未銷毀党饮,就可以接收廣播。如果您在“應用程序”上下文中注冊驳庭,則只要該應用程序正在運行刑顺,您就會收到廣播。請注意在哪里注冊和注銷接收者以防止泄漏的風險饲常。

Android為應用程序提供了三種 發(fā)送廣播 的方式:

  • sendOrderedBroadcast(Intent, String)方法一次將廣播發(fā)送到一個接收器蹲堂。當每個接收器輪流執(zhí)行時,它可以將結果傳播到下一個接收器贝淤,或者可以完全中止廣播柒竞,從而不會將其傳遞給其他接收器〔ゴ希可以使用匹配的intent-filter的android:priority屬性控制接收者的運行順序朽基;具有相同優(yōu)先級的接收器將以任意順序運行布隔。

  • sendBroadcast(Intent)方法以不確定的順序向所有接收方發(fā)送廣播。這稱為正常廣播稼虎。這效率更高衅檀,但是意味著接收器無法讀取其他接收器的結果,傳播從廣播接收的數(shù)據(jù)或中止廣播。

  • LocalBroadcastManager.sendBroadcast()方法將廣播發(fā)送到與發(fā)送者在同一應用中的接收者。如果不需要跨應用程序發(fā)送廣播媳纬,請使用本地廣播。實施效率更高(無需進程間通信)杉适,您無需擔心與其他應用程序能夠接收或發(fā)送廣播有關的任何安全問題。

如何安全使用廣播:

  • 如果只是需要將廣播發(fā)送到本應用內(nèi)最好使用LocalBroadcastManager.sendBroadcast()柳击,這樣不需要再自己去考慮安全問題淘衙。本地廣播可用作應用程序中的通用發(fā)布/訂閱事件總線,而不會產(chǎn)生系統(tǒng)范圍廣播的任何開銷腻暮。

  • 最好使用動態(tài)注冊,Android本身也更傾向于動態(tài)注冊,很多系統(tǒng)廣播現(xiàn)在只傳遞給動態(tài)注冊的廣播接收器毯侦。例如:CONNECTIVITY_ACTION(網(wǎng)絡狀態(tài)改變)哭靖。

  • 如何控制誰可以接收廣播:

    • 在發(fā)送廣播時指定全線。
    • 在Android 4.0及更高版本侈离,可以指定一個包與 setPackage(String)發(fā)送廣播時试幽。系統(tǒng)將廣播限制為與軟件包匹配的一組應用程序。
  • 限制應用接收廣播:

    • 注冊廣播時設置權限卦碾。
    • 對于聲明清單的接收者铺坞,您可以在清單中將android:exported屬性設置為“ false”。不接收外部應用程序的廣播洲胖。

隨著Android平臺的發(fā)展济榨,它會定期更改系統(tǒng)廣播的行為:

例如:

  • 從Android 9(API級別28)開始, NETWORK_STATE_CHANGED_ACTION(網(wǎng)絡狀態(tài)變更)廣播不會接收有關用戶位置或個人身份數(shù)據(jù)的信息绿映。

  • 從Android 8.0(API級別26)開始擒滑,系統(tǒng)對清單聲明的接收者施加了其他限制。如果您的應用程序針對Android 8.0或更高版本叉弦,則不能使用清單為大多數(shù)隱式廣播(不專門針對您的應用程序的廣播)聲明接收方丐一。當用戶積極使用您的應用程序時,您仍然可以使用上下文注冊的接收器淹冰。

  • Android 7.0(API級別24)及更高版本不會發(fā)送以下系統(tǒng)廣播:ACTION_NEW_PICTURE和
    ACTION_NEW_VIDEO库车。另外,定位到Android 7.0及更高版本的應用必須CONNECTIVITY_ACTION使用來注冊廣播registerReceiver(BroadcastReceiver, IntentFilter)樱拴。在清單中聲明接收者無效柠衍。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洋满,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拧略,更是在濱河造成了極大的恐慌芦岂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垫蛆,死亡現(xiàn)場離奇詭異禽最,居然都是意外死亡,警方通過查閱死者的電腦和手機袱饭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門川无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虑乖,你說我怎么就攤上這事懦趋。” “怎么了疹味?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵仅叫,是天一觀的道長。 經(jīng)常有香客問我糙捺,道長诫咱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任洪灯,我火速辦了婚禮坎缭,結果婚禮上,老公的妹妹穿的比我還像新娘签钩。我一直安慰自己掏呼,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布铅檩。 她就那樣靜靜地躺著憎夷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昧旨。 梳的紋絲不亂的頭發(fā)上岭接,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音臼予,去河邊找鬼鸣戴。 笑死,一個胖子當著我的面吹牛粘拾,可吹牛的內(nèi)容都是我干的窄锅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼入偷!你這毒婦竟也來了追驴?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疏之,失蹤者是張志新(化名)和其女友劉穎殿雪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锋爪,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡丙曙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了其骄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亏镰。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拯爽,靈堂內(nèi)的尸體忽然破棺而出索抓,到底是詐尸還是另有隱情,我是刑警寧澤毯炮,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布逼肯,位于F島的核電站,受9級特大地震影響桃煎,放射性物質發(fā)生泄漏汉矿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一备禀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奈揍,春花似錦曲尸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛾绎,卻和暖如春昆箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背租冠。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工鹏倘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顽爹。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓纤泵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镜粤。 傳聞我的和親對象是個殘疾皇子捏题,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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