付費(fèi)下載
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver
BroadcastReceiver:廣播接收器,是一個(gè)專(zhuān)注于接收廣播通知信息,并做出對(duì)應(yīng)處理的組件1、應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對(duì)所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類(lèi)
2、廣播接收器沒(méi)有用戶(hù)界面。然而,它們可以啟動(dòng)一個(gè)activity來(lái)響應(yīng)它們收到的信息,或者用NotificationManager來(lái)通知用戶(hù)。通知可以用很多種方式來(lái)吸引用戶(hù)的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等等。一般來(lái)說(shuō)是在狀態(tài)欄上放一個(gè)持久的圖標(biāo),用戶(hù)可以打開(kāi)它并獲取消息
3、Android中的廣播事件有兩種:1)系統(tǒng)廣播事件,比如:ACTION_BOOT_COMPLETED(系統(tǒng)啟動(dòng)完成后觸發(fā)),ACTION_TIME_CHANGED(系統(tǒng)時(shí)間改變時(shí)觸發(fā)),ACTION_BATTERY_LOW(電量低時(shí)觸發(fā))等等2)我們自定義的廣播事件。
4、廣播時(shí)間流程:1)注冊(cè)廣播事件:注冊(cè)方式有兩種,一種是靜態(tài)注冊(cè),就是在AndroidManifest.xml文件中定義,注冊(cè)的廣播接收器必須要繼承BroadcastReceiver;靜態(tài)注冊(cè)的廣播,在程序結(jié)束時(shí),仍會(huì)監(jiān)聽(tīng)符合的action
另一種是動(dòng)態(tài)注冊(cè),是在程序中使用Context.registerReceiver注冊(cè),注冊(cè)的廣播接收器相當(dāng)于一個(gè)匿名類(lèi)。兩種方式都需要IntentFIlter。2)發(fā)送廣播事件:通過(guò)Context.sendBroadcast來(lái)發(fā)送,由Intent來(lái)傳遞注冊(cè)時(shí)用到的Action。
3)接收廣播事件:當(dāng)發(fā)送的廣播被接收器監(jiān)聽(tīng)到后,會(huì)調(diào)用它的onReceive()方法,并將包含消息的Intent對(duì)象傳給它。
注意:onReceive中代碼的執(zhí)行時(shí)間不要超過(guò)5s,否則Android會(huì)彈出超時(shí)dialog。5、廣播的生命周期
一個(gè)BroadcastReceiver對(duì)象只有在被調(diào)用onReceive(Context,Intent)的才有效的,
當(dāng)從該函數(shù)返回后,該對(duì)象就無(wú)效的了,結(jié)束生命周期下面通過(guò)代碼來(lái)實(shí)現(xiàn)廣播的注冊(cè)與發(fā)送、接收廣播首先定義一個(gè)廣播接收器,創(chuàng)建一個(gè)類(lèi)(MyReceiver)繼承BroadcastReceiver,實(shí)現(xiàn)其onReceive()方法package
com.BroadcastReceive.Archer;
import
android.content.BroadcastReceiver;
import
android.content.Context;
import
android.content.Intent;
import
android.widget.Toast;
public
class
MyReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
action
=
intent.getAction();
if
(action.equals("com.action.text"))
{
String
msg
=
intent.getStringExtra("msg");
Toast.makeText(context,
msg,
Toast.LENGTH_SHORT).show();
}
}
}一個(gè)廣播接收器可以接收來(lái)自四面八方發(fā)出的消息,所以可以在onReceive中通過(guò)intent.getAction判斷接收到的action來(lái)進(jìn)行不同的操作,action為系統(tǒng)的action或者我們自定義的action然后需要注冊(cè)廣播了,有兩種注冊(cè)方式靜態(tài)注冊(cè):
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action
android:name="ent.action.MAIN"
/>
<category
android:name="ent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<!--
靜態(tài)注冊(cè)廣播
-->
<receiver
android:name=".MyReceiver"
>
<intent-filter>
<action
android:name="com.action.text"
/>
//自定義的action,為一個(gè)字符串
</intent-filter>
</receiver>
</application>動(dòng)態(tài)注冊(cè):private
MyReceiver
receiver
=
new
MyReceiver();
//實(shí)例化廣播接收器
//動(dòng)態(tài)注冊(cè)廣播
IntentFilter
filter
=
new
IntentFilter();
filter.addAction("com.action.text");
registerReceiver(receiver,
filter);在Activity或Service中注冊(cè)了一個(gè)BroadcastReceiver(動(dòng)態(tài)注冊(cè)),當(dāng)這個(gè)Activity或Service被銷(xiāo)毀時(shí)如果沒(méi)有解除注冊(cè),系統(tǒng)會(huì)報(bào)一個(gè)異常我們可以在onStop()或者onDestroy()中進(jìn)行解除注冊(cè) @Override
protected
void
onDestroy()
{
super.onDestroy();
unregisterReceiver(receiver);
}發(fā)送廣播Intent
intent
=
new
Intent();
intent.setAction("com.action.text");//為廣播時(shí)間設(shè)置action
intent.putExtra("msg",
"接收廣播成功");
sendBroadcast(intent);如果我們需要在發(fā)送廣播的同時(shí),進(jìn)行數(shù)據(jù)傳遞,可以通過(guò)intent來(lái)傳遞無(wú)序廣播:當(dāng)發(fā)出廣播時(shí),所有有注冊(cè)這個(gè)action的廣播接收器均會(huì)接收到這個(gè)廣播事件,且執(zhí)行無(wú)先后順序,相互之間不會(huì)有影響;沒(méi)有注冊(cè)則不會(huì)接收到有序廣播當(dāng)有多一個(gè)廣播接收器注冊(cè)這個(gè)action,且我們需要給他們?cè)O(shè)置接收的順序時(shí),這時(shí)候就要用到有序廣播。有序廣播比較特殊,它每次只發(fā)送到優(yōu)先級(jí)較高的接收器那里,然后由優(yōu)先級(jí)高的接收器再傳播到優(yōu)先級(jí)低的接收器那里,優(yōu)先級(jí)高的接收者有能力終止這個(gè)廣播。先定義兩個(gè)廣播接收器,F(xiàn)irstReceiver為優(yōu)先級(jí)較高的接收器public
class
FirstReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
action
=
intent.getAction();
if
(action.equals("action"))
{
String
msg
=
intent.getStringExtra("msg");
Toast.makeText(context,
msg,
Toast.LENGTH_SHORT).show();
Bundle
bundle
=
new
Bundle();
bundle.putString("msg",
"來(lái)自第一個(gè)廣播接收器的消息");
setResultExtras(bundle);
//將一個(gè)Bundle對(duì)象設(shè)置為結(jié)果集對(duì)象,傳遞到下一個(gè)接收者那里
}
}
}public
class
SecondReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
action
=
intent.getAction();
if
(action.equals("action"))
{
String
msg
=
getResultExtras(true).getString("msg");
//用getResultExtras獲取到經(jīng)過(guò)處理的信息
Toast.makeText(context,
msg,
Toast.LENGTH_SHORT).show();
}
}
}注冊(cè)廣播時(shí),需要給設(shè)置優(yōu)先級(jí)
android:priority
<receiver
android:name=".FirstReceiver">
<intent-filter
android:priority="1000">
//這個(gè)屬性的范圍在-1000到1000,數(shù)值越大,優(yōu)先級(jí)越高
<action
android:name="com.action.text"/>
</intent-filter>
</receiver>
<receiver
android:name=".FirstReceiver">
<intent-filter
android:priority="1000">
//這個(gè)屬性的范圍在-1000到1000,數(shù)值越大,優(yōu)先級(jí)越高
<action
android:name="com.action.text"/>
</intent-filter>
</receiver>
<receiver
android:name=".SecondReceiver">
<intent-filter
android:priority="999">
<action
android:name="com.action.text"/>
</intent-filter>
</receiver>發(fā)送有序廣播Intent
intent
=
new
Intent();
intent.setAction("com.action.text");
intent.putExtra("msg",
"來(lái)自Activity的消息");
sendOrderedBroadcast(intent,
"scott.permission.MYBROADCAST");使用發(fā)送有序廣播,第二個(gè)參數(shù)為自定義權(quán)限,為null時(shí),表示不需要聲明指定權(quán)限;不為空,表示需要聲明指定權(quán)限,聲明如下權(quán)限
<permission
and
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院健康檢查與疾病預(yù)防制度
- 公共交通服務(wù)質(zhì)量投訴處理制度
- 2026年中級(jí)電工實(shí)操技能筆試模擬題
- 2026年?duì)I銷(xiāo)知識(shí)考點(diǎn)指南及題目
- 2026年新聞傳播專(zhuān)業(yè)研究生入學(xué)考試模擬題
- 2026年旅游規(guī)劃目的地管理考試題
- 2026年康復(fù)輔助器具租賃合同
- 2025年呂梁職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 古代茶人介紹課件
- 2025 小學(xué)六年級(jí)科學(xué)上冊(cè)科學(xué)精神名言賞析課件
- 罐體加工合同范本
- 醫(yī)院物資采購(gòu)管理流程及規(guī)范
- 國(guó)內(nèi)外股權(quán)激勵(lì)制度的比較研究
- “十五五”重點(diǎn)項(xiàng)目-膨潤(rùn)土精深加工項(xiàng)目可行性研究報(bào)告
- 【普通高中地理課程標(biāo)準(zhǔn)】日常修訂版-(2017年版2025年修訂)
- 集成電路公司介紹
- 《新生兒乳糖不耐受診斷和治療專(zhuān)家共識(shí)(2025年)》解讀 3
- 2024陜西藝術(shù)職業(yè)學(xué)院輔導(dǎo)員招聘筆試真題及答案
- 單純皰疹課件
- 易制爆單位安全培訓(xùn)課件
- 2025員工安全知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論