您的位置:首页 > 其它

广播接收者

2016-06-01 18:15 489 查看
第一种方式:   动态注册

一般在所在的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出对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: