四大組件之一廣播接收器
小生第一次寫博客,定期總結筆記,鞏固知識點,希望能日積月累,厚積薄發。
什麼是廣播接收器?
就是系統的一些自身狀態發生改變時會發出”廣播”,
APP會像收音機一樣接收到這些廣播並作出處理。
例如:
開機自啓。當手機系統開機時使會向APP發出廣播:“我開機啦”,然後APP便會自動啓動。
wifi自動下載功能。APP門戶平臺都有這樣一個功能:當聯網方式變爲wifi時,變爲自動下載,爲流量時,提示下載。
一. 動態註冊廣播接收器
基本框架
定義私有變量
private IntentFiler intentFiler; private MyBroadcastReceiver myBroadcastReceiver;
初始化消息接收器、添加消息內容、註冊接收器
intentFilter = new IntentFilter(); intentFilter.addAction("消息命名"); myBroadcastReceiver = new MyBroadcastReceiver(); registerReceiver(myBroadcastReceiver,intentFilter);
定義廣播接收類(繼承廣播接收器BroadcastReceiver)
class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { } }
在onDestroy方法中小銷燬註冊
protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcastReceiver); }
二.靜態註冊廣播監聽器
關閉程序後如果接收到廣播仍能重啓程序
清單文件
<receiver name=".類名"> <intent-filter android:priority="數字"> //優先級設置,數字越大優先級越高 ,標準廣播可不寫 <action android:name="...."/> //接收的行爲消息 </intent-filter> <receiver/>
新建Class繼承BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { } }
三.發送/攔截廣播
發送標準廣播
Intent i = new Intent(); i.setAction(".....") //設置行爲消息 sendBroadcast(i);
發送有序廣播
//第二個參數爲權限設置,可定義爲null sendOrderBroadcast(i,permision);
攔截廣播
abortBroadcast();
四.使用本地廣播
意旨只限本APP程序的廣播發送
使用LocalBroadcastManager管理廣播
private LocalBroadcastManager localBroadcastManager; localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.sendBroadcast(i);
示例:動態監聽網絡變化
網絡連接或斷開自動出現消息提示
開啓WIFI時
關閉WIFI時
代碼塊
監聽網絡變化方法類
class NetworkChangeReceiver extends BroadcastReceiver{ public void onReceive(Context arg0, Intent arg1) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(networkInfo != null && networkInfo.isAvailable()){ Toast.makeText(arg0, "網絡連接成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(arg0, "網絡斷開連接", Toast.LENGTH_SHORT).show(); } } }
在onCreate方法中實例化消息接收器、網絡變化監聽方法類並註冊接收器
intentFilter = new IntentFilter(); //添加行爲信息 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(networkChangeReceiver,intentFilter);
onDestoy方法中註銷接收器
protected void onDestroy(){ super.onDestroy(); unregisterReceiver(networkChangeReceiver); }
添加(獲取網絡狀態)權限
android.permission.ACCESS_NETWORK_STATE