Android基礎(chǔ)程序設(shè)計(jì)第五章-廣播機(jī)制_第1頁
Android基礎(chǔ)程序設(shè)計(jì)第五章-廣播機(jī)制_第2頁
Android基礎(chǔ)程序設(shè)計(jì)第五章-廣播機(jī)制_第3頁
Android基礎(chǔ)程序設(shè)計(jì)第五章-廣播機(jī)制_第4頁
Android基礎(chǔ)程序設(shè)計(jì)第五章-廣播機(jī)制_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第五章 廣播機(jī)制5.1 廣播機(jī)制簡介5.5 實(shí)戰(zhàn)演練強(qiáng)制下線5.3 發(fā)送自定義廣播5.6 小結(jié)5.2 接收系統(tǒng)廣播5.4 本地廣播現(xiàn)實(shí)生活中,大多數(shù)人都會收聽廣播,例如出租車司機(jī)會收聽實(shí)時(shí)路況廣播,來關(guān)注路面擁堵狀況。在學(xué)校里,每個(gè)班級的教室里會有一個(gè)喇叭,這些喇叭都是接入到學(xué)校的廣播室,每天中午和下午都會播放廣播告知全校師生。類似的工作機(jī)制在計(jì)算機(jī)領(lǐng)域也同樣廣泛應(yīng)用。為了便于進(jìn)行系統(tǒng)級別的消息通知,Android系統(tǒng)也引入了一套類似的廣播消息機(jī)制,要過濾并接收廣播中的消息就需要使用BroadCastReceiver(廣播接收者),廣播接收者也是Android四大組件之一,通過廣播接收者可以監(jiān)

2、聽系統(tǒng)中的廣播消息,并實(shí)現(xiàn)不同組件之間的通信。5.1 廣播機(jī)制簡介實(shí)際生活中,電臺用于發(fā)送廣播,收音機(jī)用于接收廣播。發(fā)送廣播消息5.1 廣播機(jī)制簡介Android系統(tǒng)中內(nèi)置了很多廣播,例如手機(jī)開機(jī)完成、電池電量不足時(shí)都會發(fā)送一條廣播。為了監(jiān)聽來自系統(tǒng)或者應(yīng)用程序的廣播事件,Android系統(tǒng)提供了BroadcastReceiver(廣播接收者)組件。BroadcastReceiver2Android系統(tǒng)或其他程序產(chǎn)生的廣播事件BroadcastReceiver1BroadcastReceiver3 當(dāng)Android系統(tǒng)產(chǎn)生一個(gè)廣播事件時(shí),可以有多個(gè)對應(yīng)的廣播接收者接收并進(jìn)行處理。5.1 廣播機(jī)

3、制簡介廣播主要分為兩種類型:標(biāo)準(zhǔn)廣播和有序廣播標(biāo)準(zhǔn)廣播有序廣播發(fā)送一條廣播廣播接收器1廣播接收器2廣播接收器3發(fā)送一條廣播廣播接收器1廣播接收器2廣播接收器3可將廣播截?cái)嗫蓪V播截?cái)?.2 接收系統(tǒng)廣播 Android系統(tǒng)內(nèi)置很多系統(tǒng)級別廣播,應(yīng)用程序通過監(jiān)聽這些廣播得到各種系統(tǒng)狀態(tài)信息。例如手機(jī)電池電量變化會發(fā)出廣播、網(wǎng)絡(luò)狀態(tài)變化會發(fā)出廣播、時(shí)間或時(shí)區(qū)變化也會發(fā)出廣播,等等。要接收這些廣播需要使用廣播接收者 廣播接收者可以自由地對自己感興趣的廣播進(jìn)行注冊,當(dāng)有相應(yīng)廣播發(fā)出時(shí),廣播接收器就能夠接收到該廣播,并在內(nèi)部進(jìn)行相應(yīng)邏輯處理。注冊廣播的方式有兩種,在代碼中注冊的動態(tài)注冊和在清單文件中注冊

4、的靜態(tài)注冊。5.2 接收系統(tǒng)廣播5.2.1 動態(tài)注冊動態(tài)注冊的廣播接收者的生命周期依賴于注冊廣播的組件。若想接收程序或系統(tǒng)發(fā)出的廣播,首先需要?jiǎng)?chuàng)建廣播接收者。通過代碼形式也同樣可以創(chuàng)建廣播接收者,只需要在程序包處創(chuàng)建一個(gè)類,讓它繼承自BroadcastReceiver,并在類的內(nèi)部重寫onReceive()方法即可。當(dāng)廣播接收過來后,onReceive()方法中具體的邏輯就會執(zhí)行。1. 在程序包新建廣播接收者NetChangeReceiver類,并繼承BroadcastReceiverpublic class NetChangeReceiver extends BroadcastReceive

5、r Override public void onReceive(Context context, Intent intent) Toast.makeText(context,network Changes,Toast.LENGTH_SHORT).show(); 5.2 接收系統(tǒng)廣播public class MainActivity extends AppCompatActivity private IntentFilter intentFilter; private NetChangeReceiver netChangeReceiver; Override protected void on

6、Create(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /創(chuàng)建過濾器實(shí)例 intentFilter = new IntentFilter(); intentFilter.addAction(.conn.CONNECTIVITY_CHANGE); /創(chuàng)建接收者實(shí)例,并注冊 netChangeReceiver = new NetChangeReceiver(); registerReceiver(netChangeReceiver,in

7、tentFilter); Override protected void onDestroy() super.onDestroy(); /取消廣播注冊 unregisterReceiver(netChangeReceiver); 2. 修改MainActivity中代碼5.2 接收系統(tǒng)廣播 public class NetChangeReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /通過getSystemService()方法獲得專門用來管理網(wǎng)絡(luò)連

8、接的系統(tǒng)服務(wù)類ConnectivityManager實(shí)例 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);/調(diào)用getActivenectworkInfo()方法判斷是否有網(wǎng)絡(luò)應(yīng)用 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(networkInfo!=null & networkInfo.isAvailab

9、le() Toast.makeText(context,The Network is available!,Toast.LENGTH_SHORT).show(); else Toast.makeText(context,The Network is unavailable,Toast.LENGTH_SHORT).show(); 3. 優(yōu)化廣播接收者 此時(shí)的網(wǎng)絡(luò)提示變化不夠人性化,如果能夠告訴用戶當(dāng)前是否有網(wǎng)絡(luò)更好,因此,針對上述代碼我們繼續(xù)進(jìn)行優(yōu)化。5.2 接收系統(tǒng)廣播Android系統(tǒng)為了保護(hù)用戶設(shè)備安全和隱私,對于一些對用戶來說比較敏感的操作進(jìn)行了嚴(yán)格規(guī)定,必須在程序清單文件中進(jìn)行權(quán)限聲明

10、,否則程序運(yùn)行就會直接崩潰。上述項(xiàng)目案例中的訪問系統(tǒng)網(wǎng)絡(luò)狀態(tài)就需要聲明權(quán)限。在AndroidMenifest.xml文件中添加以下語句: 5.2.2 靜態(tài)注冊動態(tài)注冊的廣播接收者可以自由注冊和注銷,在靈活方面具有優(yōu)勢,但是也同時(shí)存在一個(gè)缺點(diǎn),即必須要在程序啟動后才可以接收到廣播,因?yàn)樽缘倪壿媽懺趏nCreate()方法中。能不能在程序未啟動狀況下也能夠接收廣播呢?這時(shí)候需要用到靜態(tài)注冊的方法。添加靜態(tài)注冊的廣播我們可以使用Android Studio提供的快捷方式進(jìn)行創(chuàng)建廣播接收者。5.2 接收系統(tǒng)廣播5.3 發(fā)送自定義廣播Android系統(tǒng)中自定義了很多廣播類型,只需要?jiǎng)?chuàng)建對應(yīng)的廣播接收者

11、即可。當(dāng)系統(tǒng)提供的廣播不能滿足實(shí)際需求時(shí),可以自定義廣播,同時(shí)需要編寫對應(yīng)的廣播接收者。5.3.1 標(biāo)準(zhǔn)廣播發(fā)送廣播之前,首先定義廣播接收者來接收這條標(biāo)準(zhǔn)廣播。5.3.2 有序廣播從應(yīng)用程序接收系統(tǒng)廣播可以看出廣播是一種可以跨進(jìn)程的通信方式。因此應(yīng)用程序內(nèi)發(fā)出的廣播,其他應(yīng)用程序也可以收到。接下來我們將通過實(shí)例學(xué)習(xí)跨應(yīng)用程序之間發(fā)送有序廣播的例子來掌握有序廣播。5.4 本地廣播Android系統(tǒng)引入了一套本地廣播機(jī)制,使用這個(gè)機(jī)制發(fā)出的廣播只能夠在應(yīng)用程序內(nèi)部傳遞,創(chuàng)建的廣播接收者也只能接收程序內(nèi)部的發(fā)出的廣播,有效解決安全問題。本地廣播機(jī)制主要使用LocalBroadcastManager來

12、對廣播進(jìn)行管理,并提供發(fā)送和注冊廣播接收者的方法,接下來我們通過實(shí)例具體學(xué)習(xí)。打開項(xiàng)目BroadcastTest,新建廣播接收者類LocalReceiver,具體代碼如下所示:打開MainActivity進(jìn)行修改5.4 本地廣播public class LocalReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) Toast.makeText(context,received local broadcast,Toast.LENGTH_SHORT).sh

13、ow(); 2. 打開MainActivity進(jìn)行修改5.4 本地廣播public class MainActivity extends AppCompatActivity private IntentFilter intentFilter; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstance

14、State); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(this);/獲取實(shí)例 /設(shè)置要接收的廣播內(nèi)容intentFilter = new IntentFilter(); intentFilter.addAction(com.example.broadcasttest.LOCAL_BROADCAST); localReceiver = new LocalReceiver();/動態(tài)注冊本地廣播接收者 localBroadcastManage

15、r.registerReceiver(localReceiver,intentFilter); 2. 打開MainActivity進(jìn)行修改5.4 本地廣播 Override protected void onDestroy() super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); public void send(View view) Intent intent = new Intent(com.example.broadcasttest.LOCAL_BROADCAST); localBroadcastManager.sendBroadcast(intent);/發(fā)送本地廣播 5.5 實(shí)戰(zhàn)演練新聞應(yīng)用23功能描述:技術(shù)要點(diǎn):新建活動管理類ActivityCollector創(chuàng)建新聞實(shí)體創(chuàng)建BaseActivity作為所有活動的父類新建碎片類NewsContentFragment創(chuàng)建登錄界面活動,新建LoginActivity,編輯

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論