標籤:
直奔主題,關於廣播的一些定義什麼的我覺得只要是一名合格的初級android開發這都知道吧,我下面要做的就是怎麼去使用broadcast receiver。
1.怎麼去監聽系統廣播?
Android系統有很多內建的系統廣播:電話,簡訊,時間,地區,電池電量,網路變化等等。。。那麼我們怎麼去在我們的應用中實現監聽呢?下面我們以監聽行動電話通訊發生改變的廣播進行監聽,都知道廣播有兩種註冊方式,在這裡我使用的代碼註冊的方式,為的是能更好的去理解廣播運行機制。在代碼中註冊一定要注意在你使用完畢的時候一定要反註冊掉,一定要反註冊掉,一定要反註冊掉。下面看代碼:
public class MainActivity extends Activity{ private IntentFilter intentFilter; private NetWorkChangeReceiver netWorkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); netWorkChangeReceiver = new NetWorkChangeReceiver(); registerReceiver(netWorkChangeReceiver,intentFilter); } class NetWorkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isAvailable()){ Toast.makeText(context,"network is available",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show(); } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(netWorkChangeReceiver); }}
在這裡我實現了對網路的監聽,監聽當前的網路是否可用。Android系統為了保證程式的安全性規定查詢網路狀態必須需要許可權,所以我在資訊清單檔中註冊了許可權:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
這個程式你可以拷貝下來去跑跑。
2.靜態註冊?
上面用到的是動態註冊,主要是為了讓我們能更加清晰的去瞭解廣播機制的運行。但是不可否認的是靜態註冊的方便性。動態註冊可以讓我們去很好的管理廣播的註冊和登出,非常靈活但是有一個致命的缺點就是必須在應用啟動之後,我們這個廣播接收器才可以使用。靜態註冊恰恰彌補了這一點,在你不啟動程式的情況下,就可以去監聽相關廣播(這也是為什麼很多惡意軟體都是使用這種方式來坑你,但是你要知道,沒有哪款應用會在你一次也沒有啟動過的情況下去啟動它本身的運行機制。說簡單一點就是,如果你下來了一個病毒,但是你一次也沒有開啟運行過,那麼它對你是不會產生危害的)。下面依然用例子說話:
下面實現監聽開機廣播的程式,不能忘許可權問題,先在清單中加許可權:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
下面建立我們的接收器:
public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"啟動成功",Toast.LENGTH_SHORT).show(); }}
在這裡代碼就很簡單了,只需要做我們的邏輯處理就好了,主要就是在資訊清單檔中的註冊
<receiver android:name=".BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
好了 ,相信你看了這兩個例子已經明白了廣播的運行機制了,在例子中我們只是彈出了幾個toast,你可以在裡面做你自己的邏輯運算。
知道廣播的定義,說明你在入門。
當你看懂這兩個例子並且可以熟練運用之後你就是初階了,如果你把後面那篇文章也能吃透的話,就是算是邁向中階的第一步了。
詳解廣播機制,Broadcast Receiver,Android進階必備知識(一)。