android之BroadcastReceiver(广播接收者)

2024-01-23 01:38

本文主要是介绍android之BroadcastReceiver(广播接收者),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BroadcastReceiver本意是广播接收者。这个也是android四大组件之一,广播其实我们也不难理解它,打个简单的比方,比如我们上课时,只要听到下课的铃声,这说明就要下课。在安卓中,广播是全局性的,每个应用都有可能接受到。下面就学习下怎么用广播接受者:

接下来我们就学习以下知识

  1. 静态注册广播
  2. 动态注册广播
  3. 普通广播
  4. 有序广播

静态注册广播

静态注册就是在清单文件里面注册

   <receiver
            android:name=".MyReceiver"><intent-filter><action android:name="edu.jju.broadcastreceiver"></action></intent-filter></receiver>

动态注册广播

就是通过java代码去注册而不是在清单文件里面去配置

  MyReceiver receiver=new MyReceiver();//广播接受者实例IntentFilter intentFilter=new IntentFilter();intentFilter.addAction("edu.jju.broadcastreceiver");registerReceiver(receiver,intentFilter);

注册广播就是这两种方式。接下来我们重点学习下普通广播跟有序广播

普通广播

1, 我么先定义一个类MyReceiver去继承BroadcastReceiver。并重写里面的方法

代码如下:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;public class MyReceiver extends BroadcastReceiver {public MyReceiver() {}@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context,"我接受到广播啦!!!",Toast.LENGTH_SHORT).show();}}

当有广播时,就会调用onReceive方法

MainActivity.java代码如下:


import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 这是绑定按钮添加的事件* @param view*/public void send(View view) {/*这是通过静态注册的广播*/Intent intent = new Intent();intent.setAction("edu.jju.broadcastreceiver");sendBroadcast(intent);//发送普通广播}
}

运行结果:

这里写图片描述

也可以通过动态注册来实现,可以不需要在清单文件配置。修改的代码如下:

   /*** 这是绑定按钮添加的事件* @param view*/public void send(View view) {MyReceiver receiver = new MyReceiver();//广播接受者实例IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("edu.jju.broadcastreceiver");registerReceiver(receiver, intentFilter);Intent intent = new Intent();intent.setAction("edu.jju.broadcastreceiver");sendBroadcast(intent);//发送普通广播}

运行效果是一样的

有序广播

接下来我们定义四个广播来演示下 A B C D,然后它们是接收相同的广播。

       <receiver android:name=".MyReceiver"><intent-filter><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverA"><intent-filter><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverB"><intent-filter><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverC"><intent-filter><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver>

可以看到,我们是通过静态注册的方式,而且是接受相同的广播, 在每个广播接收者中打印log

然后运行:

这里写图片描述

可以看到,我们发送一条广播,广播接收者都接受到了该广播。默认的是按在清单文件注册顺序接受的。我们可以改它们的优先级

修改代码如下

     <receiver android:name=".MyReceiver"><intent-filter android:priority="100"><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverA"><intent-filter android:priority="200"><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverB"><intent-filter android:priority="50"> <action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver><receiver android:name=".MyReceiverC"><intent-filter android:priority="300"><action android:name="edu.jju.broadcastreceiver" /></intent-filter></receiver>

优先级设置为MyReceiver 100 , MyReceiverA 200 , MyReceiverB 50 , MyReceiverC 300

再运行下

这里写图片描述

可以看到优先级高的,先接收到广播

我们也可以截断这条广播,我们就在MyReceiverA 这里截断试下

修改下MyReceiverA 代码:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class MyReceiverA extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.i("TAG", " MyReceiverA 广播 ");abortBroadcast();//截断广播}
}

再运行下:
这里写图片描述

可以看到只有两个接收到了该广播,说明是被截断了

总结:

写的不是太好,只是讲了怎么用,我也是一名初学者。争取下次博客结合案例来写。

源码下载

https://github.com/songshuilin/AndroidForBlog/tree/master/androidforbroadcastreceiver

这篇关于android之BroadcastReceiver(广播接收者)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/634864

相关文章

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络