東莞理工學校 歐陽元東
移動互聯網技術是當今最有生命力的信息技術。智能手機作為一種潮流,沖擊著人們的生活、工作和學習習慣,深刻地影響著當今世界。智能手機諸多功能和應用來娛樂和方便大眾生活,但在使用某些全屏軟件、瀏覽網絡信息、下載軟件或者上傳重要文件時如果發生諸如網絡連接斷開,網絡連接種類發生變化,如何才能及時提醒給用戶呢?為了實現這個功能,開發需要使用基于Android環境下的系統廣播技術開發該功能APP。
Android系統已經成為全球應用最廣泛的手機操作系統,它開發性的特點讓用戶自身手機私人訂制的功能成為可能。Android系統的四大組件之一Broad Cast Receiver是一種全局監聽器,用于監聽系統全局的廣播消息。因此,它可以非常方便地實現系統中不同組件之間的通信,也廣泛運用在應用程序之間的傳送信息的機制。在Android里面有各種各樣的系統廣播,比如電池的使用狀態,電話的接收和短信的接收都會產生一個廣播,應用程序開發者也可以監聽這些廣播并做出程序邏輯的處理。本APP的實現關鍵就是當網絡狀態發生變化時,Android系統就會發送一條系統廣播,開發者接收之后,檢測網絡變化的情況,就可以及時通知用戶,從而實現網絡變化及時提醒的功能。
該APP的功能就是當網絡狀態發生變化時,在用戶的界面最前面顯示“網絡已經變化,當前網絡是:wifi”或者“當前沒有可用網絡”等信息。因此,我們需要建立一個項目工程。整個開發流程分創建工程,編寫接收器繼承Broadcast Receiver基類,注冊接收器,賦予訪問網絡狀態權限,真機調試四步。
ConnectivityBroadcastReceiver的Activity綁定的布局文件比較簡單,在此略寫。
編寫一個ConnectChange類,它繼承Broadcast Receiver,實現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, "網絡已經改變,網絡類型是:"+netName,Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "當前沒有網絡可用哦!!!",Toast.LENGTH_LONG).show(); }
上述代碼大概意思是當intent中意圖行為是Connectivity Manager.CONNECTIVITY_ACTION,就發送系統廣播的action。注意當網絡狀態不變化的話是不發這個action的,網絡變化狀態變化后Android系統立刻發送這個action,當接收器里有相同的action,便會收到網絡改變的廣播。context.getSystemService(Context.CONNECTIVITY_SERVICE)是接收到系統廣播賦值給cm,取出cm中的當前網絡信息給info變量,如果變量不為空且網絡可用,則判斷是哪個類型網絡并把結果顯示出來,否則,提示當前沒有網絡可用。

圖2

圖3
由于Android模擬器中網絡網絡狀態不會發生變化,所以Android不會發生系統廣播,因此無法測試,必須用真機調試。運行截圖如下:
Android系統發送的系統廣播有很多,比如系統時間改變,系統日期改變,系統時區改變,系統啟動完成,系統的包被改變,電池電量改變或者低,系統電源被斷開等。開發這種接收系統廣播,并把系統廣播消息及時提醒用戶的APP基本步驟跟此APP的步驟基本一致,讀者只要學懂就可以舉一反三了。
[1] 王雅寧.輕松學Android開發[M].電子工業出版社,2014,6.
[2] 李剛.瘋狂Android講義[M].電子工業出版社,2013,11.