天天看點

Android四大元件之廣播接收器——接收系統廣播

Android内置了許多系統級别的廣播,我們可以在應用程式中通過監聽廣播來得到各種系統的狀态資訊。

我們要想收到廣播,就先得有廣播接收器。(就像是電台,會有許多頻道,如果你要收聽頻道,首先就得有收音機)

/**
 * 建立一個廣播接收器
 */

public class MyReceiver extends BroadcastReceiver {
    //1.建立一個類繼承BroadcastReceiver
    @Override
    public void onReceive(Context context, Intent intent) {
        //2.重寫onReceive方法(收到廣播時的動作,比如提示,日志,做下一步操作,看個人需求)
        Toast.makeText(context,"network change",Toast.LENGTH_SHORT).show();
    }
}
           

有了廣播接收器之後,接下來就是監聽注冊了。(有了收音機之後,可以确定要收聽的頻道了。)

第一種:(動态注冊)在代碼中注冊

//在MainActivity中重寫onCreate
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 1.建立IntentFilter執行個體
        IntentFilter intentFilter = new IntentFilter();
        // 2.addAction(“廣播名”),要監聽什麼,就添加什麼廣播名
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//網絡變化是發出的廣播就是“android.net.conn.CONNECTIVITY_CHANGE”
        // 3.調用registerReceiver()方法,把接收器(MyReceiver)和IntentFilter傳進去
        myReceiver = new MyReceiver();
        registerReceiver(myReceiver, intentFilter);

// 4.動态注冊的廣播接收器一定要取消注冊,
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //onDestory中調用unregisterReceiver
        unregisterReceiver(myReceiver);
    }
           

注意:Android系統為了保證系統安全性,是以要聲明權限!不然程式可能會直接崩潰!這一點很重要!!

<!-- 通路網絡狀态的權限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
           

第二種:靜态注冊(AndroidManifest中)

這裡是開機廣播

<receiver android:name=".receiver.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED">

                </action>
            </intent-filter>
        </receiver>
           

最後,和動态注冊一樣别忘了聲明權限

<!--接收開機-->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
           

總結:動态注冊靈活,但必須要程式啟動後才能接收廣播;靜态注冊可以在程式未啟動的情況下就接收到廣播

學習參考:

《第一行代碼——Android》