1、Broadcast receiver概述
broadcast receiver 是一个用来响应系统范围内的广播的组件。 很多广播发自于系统本身。—例如, 通知屏幕已经被关闭、电池低电量、照片被拍下的广播。 应用程序也可以发起广播。—例如, 通知其它程序,一些数据被下载到了设备,且可供它们使用。 虽然广播并不提供用户交互界面,它们也可以创建一个状态栏通知 来提醒用户一个广播事件发生了。尽管如此,更多的情形是,一个广播只是进入其它组件的一个“门路”,并试图做一些少量的工作。 例如,它可能发起一个服务,并通过服务执行与这个广播事件相关的工作。
broadcast receiver是BroadcastReceiver
的子类实现,而且每一个广播通过Intent
对象来传递。 更多信息,请阅读 BroadcastReceiver
类。
2、源码:
服务端:
public static final String XXX_BROADCAST = "com.XXX.XXXProvider.XXX_BROADCAST";
public void onBroadcast() { // TODO implement here //使用静态的方式注册广播,可以使用显示意图进行发送广播 Intent broadcast = new Intent(XXX_BROADCAST); broadcast.putExtra("Info", "广播内容"); sendBroadcast(broadcast, null); }
客户端:
protected ProviderBroadcastReceiver receiver; public static final String PEOPLEINFO_BROADCAST = "com.xxx.XXXInfoProvider" + ".PEOPLEINFO_BROADCAST";
/** * 注册广播 */ private void registerBroadcast() { IntentFilter counterActionFilter = new IntentFilter(XXX_BROADCAST); receiver = new ProviderBroadcastReceiver(); logger.debug(TAG_PROVIDER + "注册广播!"); getContext().registerReceiver(receiver, counterActionFilter); } /** * 注销广播 */ public void unregisterBroadcast() { logger.debug(TAG_PROVIDER + "解绑广播!"); getContext().unregisterReceiver(receiver); }/** * 广播接收端 */ public class ProviderBroadcastReceiver extends BroadcastReceiver { String info = null; @Override public void onReceive(Context context, Intent intent) {info= intent.getExtras().getString("Info");logger.debug(TAG_PROVIDER + "广播接收内容:" + info);// 推送信息callBack.onCardDetected(info);}}// 推送信息
callBack.onCardDetected(peopleInfo);
}
}
AndroidManifest.xml文件:
<application android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true" > <receiver android:name=".xxxProvider$ProviderBroadcastReceiver"> <intent-filter> <action android:name="com.xxx.xxxinfoprovider"/> </intent-filter> </receiver> </application>
推荐文章: