【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android四大組件之BroadcastReceiver_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

付費(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論