广播接收者

第一种方式:   动态注册

一般在所在的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出对象)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值