Android安卓广播实战用例讲解

494 浏览发布于 作者 zouyang (欢迎转载-请注明出处链接)留下评论分享按钮

一、概要:

安卓操作系统会把系统的各种操作通过广播事件广播给所有的应用,各应用自己实现各自需要监听的广播事件。根据收到的事件去执行相应的操作。

二、涉及方法:

BroadcastReceiver用于监听被广播的事件(intent);
为了实现监听,BroadcastReceiver必须进行注册广播,注册的方法有2种:

  • 一种是通过代码注册;
  • 另一种是通过Manifest注册(Manifest内注册的BroadcastReceiver在应用程序关闭后依然会接收到广播出来的对象)

本文讲如何通过代码来注册广播。

三、实现广播的步骤:

1、实现一个Receiver:采用回调方式


package 这里是我们的包名;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * Created by  Luca on 2017/10/8.
 * E-Mail:yangzoucn@163.com
 * Deprecated:
 */

public class RefreshUserInfoReceiver extends BroadcastReceiver {
    private Context mContext;
    private RefreshListener mRefreshListener;
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent!=null){
            mRefreshListener.Refresh(intent.getStringExtra("actionName"));
        }
    }
    public void updateUserInfo(Context mContext,RefreshListener mRefreshListener){
        this.mRefreshListener=mRefreshListener;
        this.mContext=mContext;
    }
    public static interface  RefreshListener{
        void Refresh(String actionName);
    }
}

2、发送广播

在需要进行发送广播操作的逻辑内加入发送广播的操作:



    //发送广播
    Intent intent = new Intent();
    intent.putExtra("actionName","thrid_logined");
    intent.setAction("userCenterBroadcast");
    sendBroadcast(intent);

3、接收广播并进行后续操作


        //注册广播
        RefreshUserInfoReceiver userInfoReceiver=new RefreshUserInfoReceiver();  //实例化第一步的那个类
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("userCenterBroadcast");   //设置广播名,注意此处Action与上一步注册的Action是一致的哦“userCenterBroadcast”
        getContext().registerReceiver(userInfoReceiver,intentFilter);  //注册广播
        userInfoReceiver.onReceive(getContext(),null);
        userInfoReceiver.updateUserInfo(getContext(), new RefreshUserInfoReceiver.RefreshListener() {
            @Override
            public void Refresh(final String actionName) {
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if( actionName.equals("thrid_logined") )    //这里进行具体广播类别判断,以便进行对应逻辑操作
                        {
                            //匹配到了对应广播的actionName后的 后续操作处理逻辑代码
                        } 
                    }
                });
            }
        });

就是这么简单三步,实现一个简单广播。
以上,感谢阅读:)

想要打赏,请点击这里

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注