注冊廣播

普通的廣播是在整個手機的范圍內發(fā)送的,所有的應用程序都會接收到
內部廣播只在自己的程序內部發(fā)送,只有自己的應用程序內部可以收發(fā)廣播

靜態(tài)注冊廣播

靜態(tài)的廣播只要程序的進程沒有被殺死,就會一直存在,即使所有活動都被銷毀了,只要進程沒有被強制退出,或者被殺死,靜態(tài)廣播就一直存在。
這里的intent-filter和activity的intent-filter是一樣的,可以設置多個action,也可是設置data屬性。

注冊自定義的廣播

自定義的廣播需要自己寫發(fā)送和接收廣播的方法
1 新建一個類繼承BroadcastReceiver,并重寫onReceive方法,當發(fā)送對應的廣播是。onReceive方法就會執(zhí)行

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("receiver","receiver");
    }
}

2 在配置文件中配置廣播
receiver的name是上面定義的廣播類的類名,action的name是廣播對應的action的name,自定義的廣播的action的name可以自己隨便定義。即發(fā)送的廣播的action和這個action匹配時,這個廣播就會得到響應

<receiver android:name=".broadcast.MyReceiver">
            <intent-filter>
                <action android:name="com.zyl.receiver"/>
            </intent-filter>
</receiver>
注冊已有的廣播

這類廣播包括系統(tǒng)廣播,或者是其他應用程序的廣播,這類廣播不用在自己的程序內部發(fā)送廣播,只需要注冊廣播。例如監(jiān)聽網絡變化的廣播,只要系統(tǒng)網絡變化了,就會自動發(fā)送一條廣播,自己的程序內只負責接收并且處理這個廣播就可以了。
1 新建一個類繼承BroadcastReceiver,并重寫onReceive方法,當發(fā)送對應的廣播是。onReceive方法就會執(zhí)行

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("receiver","receiver");
    }
}

2 在配置文件中配置廣播
這時action的name就不能自己定義了,每種類型的廣播都會有自己的action的name,要接收什么類型的廣播,action的name就寫成什么,這里的例子是監(jiān)聽網絡變化的廣播,當網絡變化時,就會發(fā)送這樣一條廣播,就會觸發(fā)對應的onReceive方法,在里面處理就可以了。

<receiver android:name=".broadcast.MyReceiver">
            <intent-filter>
                <action android:name"android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
</receiver>

動態(tài)注冊廣播

動態(tài)注冊的廣播必須在活動銷毀的時候取消注冊,所以動態(tài)廣播和activity共同生存,當activity被銷毀時,動態(tài)廣播也被銷毀了。
動態(tài)注冊的廣播就不需要在配置文件中注冊了,這也是四大組件中唯一一個不需要注冊的情況

注冊自定義的廣播

1 新建一個類繼承BroadcastReceiver,并重寫onReceive方法,當發(fā)送對應的廣播是。onReceive方法就會執(zhí)行

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("receiver","receiver");
    }
}

2 在activity的oncreate方法中動態(tài)注冊廣播。在onDestory中取消注冊廣播

public class DetailActivity extends Activity {
    private MyReceiver myReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detail_activity_layout);
        //創(chuàng)建廣播的對象
        myReceiver=new MyReceiver();
        //設置action
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("com.zyl.receiver");
        //注冊廣播
        registerReceiver(myReceiver,intentFilter);
        }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注冊廣播
        unregisterReceiver(myReceiver);
    }
}

注冊已有的廣播

步驟還是和上面一樣,只是把action的名字換成已知的action的name

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容