東莞理工學(xué)校 歐陽元東
移動(dòng)互聯(lián)網(wǎng)技術(shù)是當(dāng)今最有生命力的信息技術(shù)。智能手機(jī)作為一種潮流,沖擊著人們的生活、工作和學(xué)習(xí)習(xí)慣,深刻地影響著當(dāng)今世界。智能手機(jī)諸多功能和應(yīng)用來娛樂和方便大眾生活,但在使用某些全屏軟件、瀏覽網(wǎng)絡(luò)信息、下載軟件或者上傳重要文件時(shí)如果發(fā)生諸如網(wǎng)絡(luò)連接斷開,網(wǎng)絡(luò)連接種類發(fā)生變化,如何才能及時(shí)提醒給用戶呢?為了實(shí)現(xiàn)這個(gè)功能,開發(fā)需要使用基于Android環(huán)境下的系統(tǒng)廣播技術(shù)開發(fā)該功能APP。
Android系統(tǒng)已經(jīng)成為全球應(yīng)用最廣泛的手機(jī)操作系統(tǒng),它開發(fā)性的特點(diǎn)讓用戶自身手機(jī)私人訂制的功能成為可能。Android系統(tǒng)的四大組件之一Broad Cast Receiver是一種全局監(jiān)聽器,用于監(jiān)聽系統(tǒng)全局的廣播消息。因此,它可以非常方便地實(shí)現(xiàn)系統(tǒng)中不同組件之間的通信,也廣泛運(yùn)用在應(yīng)用程序之間的傳送信息的機(jī)制。在Android里面有各種各樣的系統(tǒng)廣播,比如電池的使用狀態(tài),電話的接收和短信的接收都會(huì)產(chǎn)生一個(gè)廣播,應(yīng)用程序開發(fā)者也可以監(jiān)聽這些廣播并做出程序邏輯的處理。本APP的實(shí)現(xiàn)關(guān)鍵就是當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí),Android系統(tǒng)就會(huì)發(fā)送一條系統(tǒng)廣播,開發(fā)者接收之后,檢測(cè)網(wǎng)絡(luò)變化的情況,就可以及時(shí)通知用戶,從而實(shí)現(xiàn)網(wǎng)絡(luò)變化及時(shí)提醒的功能。
該APP的功能就是當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí),在用戶的界面最前面顯示“網(wǎng)絡(luò)已經(jīng)變化,當(dāng)前網(wǎng)絡(luò)是:wifi”或者“當(dāng)前沒有可用網(wǎng)絡(luò)”等信息。因此,我們需要建立一個(gè)項(xiàng)目工程。整個(gè)開發(fā)流程分創(chuàng)建工程,編寫接收器繼承Broadcast Receiver基類,注冊(cè)接收器,賦予訪問網(wǎng)絡(luò)狀態(tài)權(quán)限,真機(jī)調(diào)試四步。
ConnectivityBroadcastReceiver的Activity綁定的布局文件比較簡(jiǎn)單,在此略寫。
編寫一個(gè)ConnectChange類,它繼承Broadcast Receiver,實(shí)現(xiàn)onReceive()方法。代碼如下:
if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){
ConnectivityManager cm=(ConnectivityManager)conte xt.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info=cm.getActiveNetworkInfo();
if(info!=null&& info.isAvailable()){
String netName=info.getTypeName().toString();
Toast.makeText(context, "網(wǎng)絡(luò)已經(jīng)改變,網(wǎng)絡(luò)類型是:"+netName,Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "當(dāng)前沒有網(wǎng)絡(luò)可用哦?。?!",Toast.LENGTH_LONG).show(); }
上述代碼大概意思是當(dāng)intent中意圖行為是Connectivity Manager.CONNECTIVITY_ACTION,就發(fā)送系統(tǒng)廣播的action。注意當(dāng)網(wǎng)絡(luò)狀態(tài)不變化的話是不發(fā)這個(gè)action的,網(wǎng)絡(luò)變化狀態(tài)變化后Android系統(tǒng)立刻發(fā)送這個(gè)action,當(dāng)接收器里有相同的action,便會(huì)收到網(wǎng)絡(luò)改變的廣播。context.getSystemService(Context.CONNECTIVITY_SERVICE)是接收到系統(tǒng)廣播賦值給cm,取出cm中的當(dāng)前網(wǎng)絡(luò)信息給info變量,如果變量不為空且網(wǎng)絡(luò)可用,則判斷是哪個(gè)類型網(wǎng)絡(luò)并把結(jié)果顯示出來,否則,提示當(dāng)前沒有網(wǎng)絡(luò)可用。
圖2
圖3
由于Android模擬器中網(wǎng)絡(luò)網(wǎng)絡(luò)狀態(tài)不會(huì)發(fā)生變化,所以Android不會(huì)發(fā)生系統(tǒng)廣播,因此無法測(cè)試,必須用真機(jī)調(diào)試。運(yùn)行截圖如下:
Android系統(tǒng)發(fā)送的系統(tǒng)廣播有很多,比如系統(tǒng)時(shí)間改變,系統(tǒng)日期改變,系統(tǒng)時(shí)區(qū)改變,系統(tǒng)啟動(dòng)完成,系統(tǒng)的包被改變,電池電量改變或者低,系統(tǒng)電源被斷開等。開發(fā)這種接收系統(tǒng)廣播,并把系統(tǒng)廣播消息及時(shí)提醒用戶的APP基本步驟跟此APP的步驟基本一致,讀者只要學(xué)懂就可以舉一反三了。
[1] 王雅寧.輕松學(xué)Android開發(fā)[M].電子工業(yè)出版社,2014,6.
[2] 李剛.瘋狂Android講義[M].電子工業(yè)出版社,2013,11.