普通的廣播是在整個手機的范圍內(nèi)發(fā)送的翎卓,所有的應(yīng)用程序都會接收到
內(nèi)部廣播只在自己的程序內(nèi)部發(fā)送青团,只有自己的應(yīng)用程序內(nèi)部可以收發(fā)廣播
靜態(tài)注冊廣播
靜態(tài)的廣播只要程序的進程沒有被殺死生宛,就會一直存在须喂,即使所有活動都被銷毀了,只要進程沒有被強制退出孵户,或者被殺死兽狭,靜態(tài)廣播就一直存在憾股。
這里的intent-filter和activity的intent-filter是一樣的鹿蜀,可以設(shè)置多個action,也可是設(shè)置data屬性服球。
注冊自定義的廣播
自定義的廣播需要自己寫發(fā)送和接收廣播的方法
1 新建一個類繼承BroadcastReceiver茴恰,并重寫onReceive方法,當發(fā)送對應(yīng)的廣播是斩熊。onReceive方法就會執(zhí)行
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("receiver","receiver");
}
}
2 在配置文件中配置廣播
receiver的name是上面定義的廣播類的類名往枣,action的name是廣播對應(yīng)的action的name,自定義的廣播的action的name可以自己隨便定義粉渠。即發(fā)送的廣播的action和這個action匹配時分冈,這個廣播就會得到響應(yīng)
<receiver android:name=".broadcast.MyReceiver">
<intent-filter>
<action android:name="com.zyl.receiver"/>
</intent-filter>
</receiver>
注冊已有的廣播
這類廣播包括系統(tǒng)廣播,或者是其他應(yīng)用程序的廣播霸株,這類廣播不用在自己的程序內(nèi)部發(fā)送廣播雕沉,只需要注冊廣播。例如監(jiān)聽網(wǎng)絡(luò)變化的廣播去件,只要系統(tǒng)網(wǎng)絡(luò)變化了坡椒,就會自動發(fā)送一條廣播,自己的程序內(nèi)只負責接收并且處理這個廣播就可以了尤溜。
1 新建一個類繼承BroadcastReceiver倔叼,并重寫onReceive方法,當發(fā)送對應(yīng)的廣播是宫莱。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)聽網(wǎng)絡(luò)變化的廣播,當網(wǎng)絡(luò)變化時识椰,就會發(fā)送這樣一條廣播绝葡,就會觸發(fā)對應(yīng)的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ā)送對應(yīng)的廣播是。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();
//設(shè)置action
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("com.zyl.receiver");
//注冊廣播
registerReceiver(myReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消注冊廣播
unregisterReceiver(myReceiver);
}
}
注冊已有的廣播
步驟還是和上面一樣溅呢,只是把action的名字換成已知的action的name