1.動態註冊廣播接受者
就是在java中指定IntentFilter,然後添加不同的Action即可,想監聽什麼廣播就寫什麼Action。要注意的是
動態註冊廣播,一定要調用unregisterReceiver()。
2.靜態註冊廣播接受者
動態註冊需要程序啓動後才能接收廣播,靜態廣播就彌補了這個短板,在AndroidManifest中定製就可以讓程序在未啓動的情況下接收到廣播了。
示例代碼:
MyReceiver .java
public class MyReceiver extends BroadcastReceiver{
//自己定義的Action
private final String ACTION_BOOT = "com.example.broadcasttest.MY_BROADCAST";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(ACTION_BOOT.equals(intent.getAction())){
Toast.makeText(context,"收到廣播啦!",Toast.LENGTH_SHORT).show();
}
}
}
動態註冊:
MainActivity .java
public class MainActivity extends Activity {
private MyReceiver myReceiver;
private Button btn_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start=(Button)findViewById(R.id.btn_start);
btn_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
}
});
myReceiver=new MyReceiver();
IntentFilter itFilter=new IntentFilter();
//自己定義的廣播,也可以監聽系統廣播,如開機完畢,網絡變化等
itFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
registerReceiver(myReceiver, itFilter);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
靜態註冊:
manifest文件
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
</intent-filter>
</receiver>
MainActivity.java
public class MainActivity extends Activity {
private MyReceiver myReceiver;
private Button btn_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start=(Button)findViewById(R.id.btn_start);
btn_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
}
});
}
}
注意事項:
不要在廣播裏添加過多邏輯或者進行任何耗時操作,因爲在廣播中是不允許開闢線程的, 當onReceiver( )方法運行較長時間(超過10秒)還沒有結束的話,那麼程序會報錯(ANR), 廣播更多的時候扮演的是一個打開其他組件的角色,比如啓動Service,Notification提示, Activity等!