Android四大组件之broadcast广播使用讲解

Android四大组件之broadcast广播使用讲解

在Android开发中,广播(Broadcast)是四大组件之一,广播是一种可以跨应用程序的组件间传递数据的机制。本文将详细讲解broadcast的使用方法及示例。

1. broadcast的定义

广播是一种可以跨应用程序的组件间传递数据的一种机制,在应用中进行发出及接收。广播可以被普通应用程序接收,所以与其它组件一样,可以在一个应用中发送广播,而能够接收它的应用也并不限于它与发送者相同的那个应用程序。

2. broadcast的使用

broadcast要涉及到两个角色,发送者和接收者,即广播的发射源以及接收源。

我们可以通过发送一个Intent对象(也就是广播信号)的方式,将需要传递的数据发送出去(由系统将数据分发给广播接收器),或者通过动态注册的方式,将自己注册为广播接收者,从而接收到系统发出的广播。

2.1 发送者

发送者需要构建一个Intent对象,设置action并添加需要传递的数据,然后通过sendBroadcast(Intent)方法将数据发送出去。如下所示:

// 发送广播
Intent intent = new Intent();
intent.setAction("com.example.broadcast");
intent.putExtra("data", "hello world");
sendBroadcast(intent);

2.2 接收者

接收者需要动态注册成为广播接收者或者在manifest文件中静态注册,然后实现onReceive()方法,接收到广播后,即可获取到发送者发送的数据。如下所示:

// 动态注册广播接收者
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.example.broadcast".equals(intent.getAction())) {
            String data = intent.getStringExtra("data");
            Log.d(TAG, "onReceive: " + data);
        }
    }
};
IntentFilter filter = new IntentFilter("com.example.broadcast");
registerReceiver(receiver, filter);

3. broadcast的示例

3.1 系统广播示例

系统提供了很多广播动作,我们可以通过注册系统广播的方式,响应系统广播。

下面提供两个示例,第一个是监听网络状态发生变化:

public class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取网络状态
        ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
        if (activeInfo != null && activeInfo.isConnected()) {
            Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "网络已断开", Toast.LENGTH_SHORT).show();
        }
    }
}

在manifest文件中注册:

<receiver android:name=".NetworkChangeReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

第二个示例是在接收到短信时弹出一个Toast:

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");
            StringBuilder sb = new StringBuilder();
            for (Object pdu : pdus) {
                SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);
                sb.append("短信来源: " + message.getDisplayOriginatingAddress());
                sb.append("\n短信内容: " + message.getDisplayMessageBody());
            }
            Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
        }
    }
}

动态注册:

BroadcastReceiver receiver = new SmsReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, filter);

以上就是broadcast的使用讲解及示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android四大组件之broadcast广播使用讲解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 从荣耀7看 有点不同 的荣耀品牌

    从荣耀7看 有点不同 的荣耀品牌攻略 荣耀品牌作为华为旗下的手机品牌,近年来备受关注。让我们以荣耀7为例,看一下荣耀品牌与其他手机品牌有哪些不同。 硬件配置的高性价比 荣耀7的硬件配置虽然不如当今的旗舰机型,但在当时的市场上,无疑是性价比最高的一款手机。它搭载了华为自主研发的麒麟925芯片,配备了3GB的大内存以及32GB的存储空间。相比当时的市场主流机型,…

    人工智能概览 2023年5月25日
    00
  • Node.js使用Express.Router的方法

    使用 Express.Router 可以帮助我们更加有效地管理我们的路由逻辑,将不同的路由划分到不同的模块中,使得程序结构更加清晰。下面是使用 Express.Router 的方法: 1. 创建一个 Router 对象 我们首先需要通过 Express.Router() 方法来创建一个新的 Router 对象,然后可以使用 Router 对象上的方法来定义我…

    人工智能概论 2023年5月25日
    00
  • Python Web框架Tornado运行和部署

    下面我来详细讲解一下Python Web框架Tornado的运行和部署攻略。 Tornado的部署 1.环境准备 安装Python3.x(如果已经安装,则忽略) 安装pip工具(如果已经安装,则忽略) 安装Tornado包 在安装Tornado包时可以使用以下命令: pip install tornado 2.编写Web应用代码 以下是一个示例的Tornad…

    人工智能概览 2023年5月25日
    00
  • struts json 类型异常返回到js弹框问题解决办法

    Struts JSON 类型异常返回到 JS 弹框问题解决办法 问题描述 在使用 Struts 框架时,当后台向前端返回 JSON 类型的数据时,如果发生异常,如何将异常信息以弹框形式提示给用户? 解决办法 Struts 2 支持全局异常拦截器,我们可以在 struts.xml 文件中配置全局异常拦截器,并在异常拦截器中实现将异常信息转换成 JSON 类型,…

    人工智能概论 2023年5月25日
    00
  • Python Web后端开发中的增查改删处理

    Python Web后端开发中的增查改删处理是指在Web应用程序中对数据的操作方式。在实际开发中,我们通常采用四个操作:增加(Create)、查找(Retrieve)、更新(Update)和删除(Delete),简称为CRUD。本文将详细讲解Python Web后端开发中的增查改删处理的完整攻略:如何使用Python Web框架来完成CRUD操作,以及如何使…

    人工智能概览 2023年5月25日
    00
  • C语言封装函数字符串练习汇总分享

    针对“C语言封装函数字符串练习汇总分享”的完整攻略,我将详细解释以下内容。 标题 首先我们需要确定标题,一个好的标题能够准确展示本文的主题,因此我们可以选择:“C语言封装函数字符串练习汇总分享”。 介绍 在介绍部分,我们需要说明C语言中封装函数的概念以及其作用,具体内容如下: C语言是一种面向过程的编程语言,也就是说程序执行的流程是从头到尾依次执行的。但是,…

    人工智能概览 2023年5月25日
    00
  • 在Django中创建第一个静态视图

    以下是在Django中创建第一个静态视图的完整攻略: 1. 创建Django项目和应用 首先,我们需要在本地创建一个Django项目。我们可以通过在命令行中输入以下命令来创建项目: django-admin startproject myproject 其中,myproject是项目的名称,你可以设置为任意你喜欢的名称。 接着,我们需要在项目中创建一个应用,…

    人工智能概览 2023年5月25日
    00
  • nginx目录路径重定向的方法

    下面我将为您详细讲解“nginx目录路径重定向的方法”的完整攻略。 1. 配置nginx 首先需要在nginx的配置文件中添加一个location来实现路径重定向,可以使用vim等编辑器打开nginx配置文件,一般默认路径为/etc/nginx/nginx.conf,在http或server模块中添加以下代码: location /old_path/ { r…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部