关于BroadcastReceiver

广播是用来不同的组件之间通信的,一个组件发送广播,另外一个组件接受广播,然后做需要的处理。比方说在Q Activity中点击某个按钮,想要关闭E Activity时,那么在Q发送一个广播,并且指定Action(可以认为是标签),在E定一个广播接受者,E接收到了Q发来的广播,就可以在里面做相应的处理。

Q Activity中发送广播:

                Intent intent=new Intent();
                intent.setAction("com.zhangli.finishActivity");
                sendBroadcast(intent);

E Activity中的广播接受者,其中给广播进行了动态注册:

public class EActivity extends Activity{
        private MyBroadcastReceiver myBroadcastReceiver;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_music_list_layout);

            //给广播注册(从QActivity得到关闭的广播)
            myBroadcastReceiver = new MyBroadcastReceiver();
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("com.zhangli.finishActivity");
            registerReceiver(myBroadcastReceiver, intentFilter);
        }
        
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //关闭广播,节约内存
            unregisterReceiver(myBroadcastReceiver);
            myBroadcastReceiver=null;
        }


静态注册(配置清单中),定义广播接受的优先级:-1000~1000

        <receiver android:name=".utils.CircleMenuLayout$MyBroadcastReceiver">
            <intent-filter android:priority="1000" >
                <action android:name="android.intent.action.MYXUANZHUAN" />
            </intent-filter>
        </receiver>

终止广播:
abortBroadcast();

在onDestory()中销毁:

unregisterReceiver(myGengxinReceiver);
myGengxinReceiver=null;

不管广播是否被其他接收者终止,最后FinalReceiver 都会接收到。

sendOrderedBroadcast(intent, null,new FinalReceiver(), null, 0, null, null);



广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里。

LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.CART_BROADCAST");//建议把它写一个公共的变量,这里方便阅读就不写了。
BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent){
                System.out.println("OK");
            }
 };
 broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter);
 
发送广播
 
 
Intent intent = new Intent("android.intent.action.CART_BROADCAST");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

在Activity中接收到从Fragment发来的广播,要多添加一个manager:

        mBroadcastManager = LocalBroadcastManager.getInstance(this);
        myBroadcastReceiver = new ClearBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Constants.ADRESSFRAGMENT_BRODCAST);
        mBroadcastManager.registerReceiver(myBroadcastReceiver, intentFilter);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值