BroadCast的两种使用方法

1、  简单的介绍一下BroadCast的使用,理论方法的比较欠缺,以下内容纯粹是自己的个人总结,不足之处,欢迎大家提出宝贵的意见,程序代码运行,真是有效,可以使用

2、BroadCast是安卓四大组件之一,和Service不一样,一个是绑定的使用, 一个是全局监听,方便组件之间的通信。

3、主要有 Normal BroadCast (普通广播)  Ordered BroadCast (有序广播) 两种,普通广播无法将结果继续传递,无法终止       广播,有序广播可以。

4、使用方法:MainActivity 发送消息,让他一直发送消息,,你也可以直接发送一个字符串

Thread myThread = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true) {
            i++;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Message msg = new Message();
            msg.what = 0x01;
            msg.obj = i;
            myhandler.sendMessage(msg);
        }
    }
});

public Handler myhandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 0x01:
                Log.i("dachenSend", msg.obj.toString());
                StareBroadCast(msg.obj.toString());
                break;
            default:

                break;
        }
    }
};

开始广播消息了  setAction 和 putExtra的key  你想怎么设置,反正就是一个标记

/**
 * @Function: 开始广播消息
 * @Return:
 */
private void StareBroadCast(String broadcastmsg) {
    //创建Intent对象
    Intent intentBroadCast = new Intent();
    //设置Intent的Action的属性
    intentBroadCast.setAction("BroadCast.test");
    intentBroadCast.putExtra("msg_test", broadcastmsg);
    //发送广播
    sendBroadcast(intentBroadCast);
}

直接继承不需要使用  匿名内部类才去使用

//用于匿名内部类的
public void jump(View view) {
    Intent myIntent2 = new Intent(MainActivity.this, TestActivity.class);
    startActivity(myIntent2);
}

 

4.1 直接继承类,但是Java是单继承,多实现,一个extends用完之后就感觉心里不踏实,当然你可以把自己定义的类再继承一遍(个人经验,可以用,可能不满足撸的习惯)。这种方法 简单粗暴,,

新建 一个类 

/**
 * @ Create by dadac on 2018/10/10.
 * @Function:
 * @Return:
 */
public class MyBroadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("dachenReceiveExtends", intent.getAction() + "\t消息内容是:" + intent.getStringExtra("msg_test"));
    }
}
这样消息就过来了,还得注册一下

注册有两种方式,个人推荐这种方式的实现,在 AndroidManifest 中直接注册即可  和<activity>是并行目录的祖册

<receiver android:name=".MyBroadCastReceiver">
    <intent-filter>
        <action android:name="BroadCast.test" />
    </intent-filter>
</receiver>

4.2 使用匿名内部类  开启一个新的 Activity ,Service也行

public class TestActivity extends AppCompatActivity {

    private MyBroadCastReceiver2 myBroadCastReceiver2;

    String a;

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

        myBroadCastReceiver2 = new MyBroadCastReceiver2();


        // 创建IntentFilter
        IntentFilter filter = new IntentFilter();
        // 指定BroadcastReceiver监听的Action
        filter.addAction("BroadCast.test");
        // 注册BroadcastReceiver
        registerReceiver(myBroadCastReceiver2, filter);
    }

    class MyBroadCastReceiver2 extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // a=intent.getStringExtra("msg_test");
            Log.i("dachenReceiveNew", intent.getAction() + "\t消息内容是:" + intent.getStringExtra("msg_test"));
        }
    }
}

这种方式无法在 AndroidManifest中注册  ,名字不对  所以使用:

// 创建IntentFilter
IntentFilter filter = new IntentFilter();
// 指定BroadcastReceiver监听的Action
filter.addAction("BroadCast.test");
// 注册BroadcastReceiver
registerReceiver(myBroadCastReceiver2, filter);

但是必须得启动这个Activity 或是 线程  才会打印出数据

 

注意点:  注册的方式两种     必须要注册Activity  layout中就一个Button

如遇侵权:请尽快联系作者,,谢谢

代码已经上传到Github上:https://github.com/KEYD111/BroadCast.git

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值