Android基础学习【历史流程重走】 ----四大组件之BroadCastReceiver

本文详细介绍了Android中的广播机制,包括广播的基本使用步骤、两种广播注册方式(动态代码注册与XML文件注册)、以及如何利用广播机制来监听网络状态的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、BroadCast的基本使用步骤
1,使用步骤
      <span style="white-space:pre">	</span>1,注册广播接收器,在接受方法里处理接受内容;
        2,发送广播;
        3,在使用结束后,取消注册接收器。
2,使用理解
广播相当于一个固有存在的硬件,在使用的时候,只需要关注:
1,发送广播,发送什么样数据;
2,广播接收器,处理接受到广播内容的后续操作;
2,核心是,将发出的广播与广播接收器链接。
二、BroadCast的两种使用方式
1,动态代码注册
【1】activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.future.broadcastdemo.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="广播接收者基本使用Demo:\n
        1,注册广播接收器,在接受方法里处理接受内容;\n
        2,发送广播;\n
        3,在使用结束后,取消注册接收器。\n" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="registerBroadCastOnclick"
        android:text="注册广播接收器" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="sendBroadCastOnclick"
        android:text="发送广播" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="unRegisterBroadCastOnclick"
        android:text="取消注册广播接收器" />

    <TextView
        android:id="@+id/desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
主要包括广播发送的三个步骤的的按钮触发器,以及内容接收后的展示。
【2】创建广播接收器
    class ReceiveBroadCast extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String data = intent.getStringExtra("data");
            castContentDesc.setText(data);
        }
    }
实现功能是将接收到的数据用展示控件展示出来。
【3】广播接收器的注册
<pre name="code" class="java">    /**
     * 注册广播接收器
     *
     * @param view
     */
    public void registerBroadCastOnclick(View view) {
        broadCast = new ReceiveBroadCast();
        IntentFilter filter = new IntentFilter(Flag);
        registerReceiver(broadCast, filter);
    }
即是第一个按钮的点击事件。
 
 
【4】发送广播
    /**
     * 发送广播
     *
     * @param view
     */
    public void sendBroadCastOnclick(View view) {
        Intent intent = new Intent();
        intent.putExtra("data", Calendar.getInstance().get(Calendar.SECOND) + "广播传送数据");
//        intent.setAction(Flag);
        intent.setAction("com.future.broadcastdemo.xml");
        sendBroadcast(intent);
    }
即是发送广播按钮点击事件。
【5】取消注册广播接收器
   /**
     * 取消注册广播接收器
     *
     * @param view
     */
    public void unRegisterBroadCastOnclick(View view) {
        /**
         * 两种方式:
         * 1,异常捕获
         * 2,对象置空
         */
//        try {
        if (broadCast != null) {
            unregisterReceiver(broadCast);
            broadCast = null;
        }
//        } catch (Exception e) {
//            /**
//             * 提示消息
//             */
//            e.printStackTrace();
//        }
    }
重复取消注册会出现异常,用两种方式来保证异常的处理。

2,xml文件注册广播接收器
        <receiver android:name=".BroadCastXML">
            <intent-filter>
                <action android:name="com.future.broadcastdemo.xml" />
            </intent-filter>
        </receiver>
广播接收器创建:
public class BroadCastXML extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String data = intent.getStringExtra("data");
        Log.d("BroadCastXML", "xml注册广播接收者的使用data:" + data);
        System.out.print("xml注册广播接收者的使用System_data:" + data);
    }
}
发送广播,即可在接受器中接收消息。
xml注册中的Action与发送广播消息的Action必须保持一致。

3,展示效果


三、应用BroadCast监听网络状态
1,注册网络状态广播接收器
<pre name="code" class="java">        netReceive = new NetChangeBroadCastReceive();
        /**
         * 注册网络状态监听器
         */
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(netReceive, filter);

 
 
 2,网络状态广播接收器实现
   private class NetChangeBroadCastReceive extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            /**
             * networkInfo.isAvailable();
             * 是否有网络连接
             */
            if (networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(context, "网络连接正常", Toast.LENGTH_SHORT).show();
                castContentDesc.setText("网络连接正常");
            } else {
                Toast.makeText(context, "网络连接失败", Toast.LENGTH_SHORT).show();
                castContentDesc.setText("网络连接失败");
            }
        }
    }
3,权限添加
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


这里是源码

自己经历千心万苦而酿造出来的生活之蜜,肯定比轻而易举拿来

的更有滋味!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹叁零壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值