(1)在应用中接收系统其他应用发出的广播
广播跨进程通讯是一种被动的访问方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。下面就是一个监听系统网络变化的广播接收器,示例代码如下:
public class NetWorkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取网络连接信息
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeInfo = manager.getActiveNetworkInfo();
//如果无网络连接
if(activeInfo == null){
Toast.makeText(context, "网络未连接", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, activeInfo.getTypeName()+"网络已连接",
Toast.LENGTH_LONG).show();
}
}
}
这个接收器是在AndroidManifest.xml文件中注册的,示例代码如下:
<receiver android:name=".NetWorkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
在注册广播接收器类时使用<action>标签的android:name指定了广播的ID。
上面代码中的android.net.conn.CONNECTIVITY_CHANGE就是网络状态变化时系统发出的广播的Action。
(2)发送广播
在应用程序中发送广播比较简单,只需要调用sendBroadcast(Intent intent)方法即可。参数intent指定了广播的ID,及Action(注册该广播的接收器时使用),通过参数intent还可以发送需要广播的数据。代码示例如下:
Intent intent = new Intent();
intent.setAction("com.sarnasea.interprocess.MYBROAD_ACTION");
intent.putExtra("data", "要广播的数据");
sendBroadcast(intent);
这样在其他应用中就可以利用设置的Action来注册广播接收器了。
(3)在代码中注册广播接收器
另除了在AndroidManifest.xml中注册之外,还可以在代码中调用registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法注册广播接收器。其中filter指定注册广播的Action。示例代码如下:
IntentFilter filter = new IntentFilter(
"com.sarnasea.interprocess.MYBROAD_ACTION");
registerReceiver(receiver, filter);
在广播接收器的onReceive回调方法中,可利用其intent参数获取到发送广播时传递的要广播的数据,示例代码如下:
/**广播接收器*/
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//接收到广播后进行的操作
String data = intent.getStringExtra("data");
Toast.makeText(context, data, Toast.LENGTH_SHORT).show();
}
};


