美文网首页
Android 在Fragment中发送和接收广播

Android 在Fragment中发送和接收广播

作者: sugarkawhi | 来源:发表于2016-06-29 14:50 被阅读4058次

    目前做的应用中,需要嵌入广点通广告。在一个资源列表列表中,效果图如下

    列表效果图.gif

    广点通拉取部分原生广告,获取到广告的信息后,直接进行展示就可以了。

    但是有一个棘手的需求是,也可以查看它的详情内页,效果图如下

    内页效果图.gif

    button按钮,设置点击事件,触发广点通广告下载事件。

    nativeADDataRef.onExposured(gdtView);
    nativeADDataRef.onClicked(gdtView);
    

    问题来了,这个点击事件是由 NativeADDataRef 这个类的对象触发的,就是说,在列表页,我们拉取到广告,还需要在内页展示,并且要有触发事件。

    那好吧,我们通过传值,把这个对象用intent传过去不就ok了嘛。但是这里有一个问题,NativeADDataRef 是广点通api提供的,我们无法将他序列化

    implements Serializable 序列化

    public interface NativeADDataRef {
        String getTitle();
        String getDesc();
        ...
        ...
    }
    

    这里有其他解决办法,有看到的同学知道还忘告知我。

    那就只好使用广播的方法了:

    • 当内页触发广告的点击事件时,发送广播
    • 在有NativeADDataRef 对象的页面,接收广播
    • 通过接收传递的数据,进行广告的点击

    解决:

    首先内页是一个Fragment,恰好,首页列表也是一个Fragment。所以:
    我们就需要在Fragment中发送广播,也在Fragment中接收广播。

    1、发送广播:
    Intent intent = new Intent(AD_DOWNLOAD_ACTION);
    intent.putExtra("resource", resource);
    LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
    

    以上intent的action是一个常量,携带我们的参数。

    2、接收广播:
     LocalBroadcastManager broadcastManager;
    
        /**
         * 注册广播接收器
         */
        private void receiveAdDownload() {
            broadcastManager = LocalBroadcastManager.getInstance(getActivity());
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(XXX.AD_DOWNLOAD_ACTION);
            broadcastManager.registerReceiver(mAdDownLoadReceiver, intentFilter);
        }
    
     BroadcastReceiver mAdDownLoadReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Resource resource = (Resource) intent.getSerializableExtra("resource");
                //这里接收到广播和数据,进行处理就是了
                }
            }
        };
    

    但是不要忘了一点,在我们不需要接收广播的时候,一点要取消掉。
    这里,我在onDestroy方法里,进行了广播的取消

    @Override
        public void onDestroy() {
            super.onDestroy();
            broadcastManager.unregisterReceiver(mAdDownLoadReceiver);
        }
    

    以上!

    相关文章

      网友评论

          本文标题:Android 在Fragment中发送和接收广播

          本文链接:https://www.haomeiwen.com/subject/ptetjttx.html