首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >安卓四大组件之二广播

安卓四大组件之二广播

作者头像
张哥编程
发布2024-12-19 08:44:11
发布2024-12-19 08:44:11
21600
代码可运行
举报
文章被收录于专栏:云计算linux云计算linux
运行总次数:0
代码可运行

定义

BroadcastReceiver,“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度等等。Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。

在我们详细分析创建BroadcastReceiver的两种注册方式前,我们先罗列本次分析的大纲:

(1)对静态和动态两种注册方式进行概念阐述以及演示实现步骤

(2)简述两种BroadcastReceiver的类型(为后续注册方式的对比做准备)

(3)在默认广播类型下设置优先级和无优先级情况下两种注册方式的比较

(4)在有序广播类型下两种注册方式的比较

(5)通过接受打电话的广播,在程序(Activity)运行时和终止运行时,对两种注册方式的比较

(6)总结两种方式的特点

一、静态和动态注册方式

? 构建Intent,使用sendBroadcast方法发出广播定义一个广播接收器,该广播接收器继承BroadcastReceiver,并且覆盖onReceive()方法来响应事件注册该广播接收器,我们可以在代码中注册(动态注册),也可以AndroidManifest.xml配置文件中注册(静态注册)。

案例解析:

1.主界面设计

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnSend"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:insetTop="16dp"
        android:text="发松" />
</LinearLayout>

如图:

安卓四大组件之二广播_广播
安卓四大组件之二广播_广播

2.后台代码设计

代码语言:javascript
代码运行次数:0
运行
复制
package com.aaa.btdemo02;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
    //定义对象;村长:一样权威,光辉的存在,拿着大喇叭,讲话;
    Button btnSend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //取值
        btnSend=(Button) findViewById(R.id.btnSend);
        //这对这个按钮做监听事件;发送信息,大喇叭...
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                //设置intent的动作;后面字符串是自定义的
                intent.setAction("android.intent.action.receiverdata");
                intent.putExtra("msg","羊村各位村民开会了");
                MainActivity.this.sendBroadcast(intent);
            }
        });
    }
}

3.创建自己的广播接收器类

代码语言:javascript
代码运行次数:0
运行
复制
package com.aaa.btdemo02;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //接受广播
        if(intent==null)return;
        //intent:接受从主端传递过来的数据,action数据;
        String action=intent.getAction();
        //针对上述做判断;第一个判断是否为空也可以写成action.isEmpty
        if(!TextUtils.isEmpty(action)&&"android.intent.action.receiverdata".equals(action)){
            String msg=intent.getStringExtra("msg");//不习惯可以使用Bundle
            Log.i("喜洋洋-->",msg);
        }
    }
}

4.注册广播

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aaa.btdemo02">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Btdemo02">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MyReceiver"
            android:exported="true">
            <intent-filter>
                <!-- 自定义的action名 -->
                <action android:name="android.intent.action.receiverdata"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

5.运行效果

在这里插入图片描述

安卓四大组件之二广播_广播_02
安卓四大组件之二广播_广播_02
安卓四大组件之二广播_java_03
安卓四大组件之二广播_java_03
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档