第一种方式: 动态注册
一般在所在的Activity的onCreate()方法中动态注册一个广播,添加广播条件。
private DownOverReceiver downOverReceiver;
public static final String RECEIVERACTION = "downover";
public static final String CANCEL_DOWNLOAD = "canceldownload";
在onCreate()中注册:
downOverReceiver = new DownOverReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVERACTION);
intentFilter.addAction(CANCEL_DOWNLOAD);
registerReceiver(downOverReceiver, intentFilter); // 动态注册 [视频下载结束] 的接收者
在本Activity中写接收者处理【好处是便于数据处理】 (也可以单独一个receiver包中写)
private class DownOverReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(RECEIVERACTION)) { // 具体逻辑
if (downDialog != null && downDialog.isShowing()) {
downDialog.dismiss();
}
if (!downView.isEnabled()) {
downView.setEnabled(true);
Log.d(TAG, "下载完成,回调主线程");
initDatas();
tabViewPager.setCurrentItem(1);
}
}
}
}
在Activity或Service子类中的onDestroy()方法中解除注册广播:
@Override
protected void onDestroy() {
if (downOverReceiver != null) {
unregisterReceiver(downOverReceiver);
}
super.onDestroy();
}
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
/**
* 开始下载
*/
private void startDown() {
if (DownPosition == list.size()) {
Log.d(TAG, "批量下载已完成~~~");
sendBroadcast(new Intent(SubscriptionDescActivity.RECEIVERACTION));
stopSelf();
return;
}
count = 0;
currentPosition = 0;
new GetSDActDetailBiz(context, list.get(DownPosition).ID, handler).startNet();
}
/*=================================================================*/
另外,
广播也可以在Service类中的onCreate()方法中注册,添加广播条件:
public static final String STOP = "downservice_stop";
private StopReceiver receiver;
在onCreate()中注册:
receiver = new StopReceiver();
IntentFilter filter = new IntentFilter(STOP);
registerReceiver(receiver, filter);
接收者处理也写在本类中:
class StopReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals(STOP)) { // 在此处写逻辑代码
Log.d(TAG, "调用服务停止广播!");
if (downLoadHelper!=null) {
Log.d(TAG, "停止下载");
downLoadHelper.setRunDown(false);
}
stopSelf();
}
}
}
在Activity或Service子类中的onDestroy()方法中解除注册广播:
@Override
public void onDestroy() {
if (receiver!=null) {
unregisterReceiver(receiver);
}
Log.d(TAG, "服务停止!");
super.onDestroy();
}
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
广播发送的时候可以携带数据包Bundle一起通过Intent来发送。
相应接收者也可以在接收处理的时候从传过来的intent中获取数据包获得相关的数据,例如数值,集合,图等。
第二种方式:在manifest中注册广播接收者 (name要写广播接收者的全部路径 另外这种方式注册的广播不需要new出对象)