廣播接收器

四大組件之一廣播接收器

小生第一次寫博客,定期總結筆記,鞏固知識點,希望能日積月累,厚積薄發。

什麼是廣播接收器?

就是系統的一些自身狀態發生改變時會發出”廣播”,
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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章