BroadcastReceiver广播传递信息

2024-01-11 04:48

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

BroadCast 广播用于程序间的接收、过滤、并处理信息。同时,广播实现方式分为静态广播和动态广播

静态广播:需要在manifest中注册实现。

广播端,继承BroadcastReceiver 重写onReceive()方法处理接收的信息

public class MyBroadCast extends BroadcastReceiver {public static final String MY_SMS_BROADCAST = "com.example.broadcast.sms";//自定义广播标记实现,通过此来发送广播public static final String SYSTEM_SMS_BROADCAST = "android.provider.Telephony.SMS_RECEIVED"; //系统定义字符标记@Overridepublic void onReceive(Context arg0, Intent arg1) {String action = arg1.getAction();if (action.equals(MY_SMS_BROADCAST)) {  //实现过滤
<span style="white-space:pre">			</span>//接收处理信息Toast.makeText(arg0, "处理自定义短信广播", Toast.LENGTH_SHORT).show();}else if (action.equals(SYSTEM_SMS_BROADCAST)) {
<pre name="code" class="html"><span style="white-space:pre">			</span>//接收处理信息
Toast.makeText(arg0, "处理系统接收短信", Toast.LENGTH_SHORT).show();}}}

 发送信息端, 此处采用按钮点击发送(activity端) 

mSMSBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MyBroadCast.MY_SMS_BROADCAST);   //将消息发送到标记端sendBroadcast(intent);}});
在manifest中的注册

<receiver android:name="com.example.broadcast.MyBroadCast"><intent-filter><!-- 自定义注册过滤 --><action android:name="com.example.broadcast.sms"></action><!-- 系统接收短信过滤 --><action android:name="android.provider.Telephony.SMS_RECEIVED"></action></intent-filter></receiver>
同时此处运用手机系统所有的功能时应加上权限,此处用到系统短信接收,应加上接收权限

 <!-- 广播接收处理短信权限 --><uses-permission android:name = "android.permission.RECEIVE_SMS" />

做到此处,广播的静态实现方式就可以实现了。

但此时还应该注意一个问题:在我们处理信息时在onReceive()方法中不能过久的处理信息,超过10秒左右的耗时操作就会报错(因为广播的生命周期为10秒左右)。

广播的分类:1、普通广播(无序广播) (Normal broadcasts)、大多数情况下使用的

2、有序广播 (Ordered broadcasts)、广播依次发送,有权限问题,看了一下网上大多数情况下说的是权限在-1000到1000之间,数值越大,优先级越高,获取信息者可以更改和删除信息,但我也看到有说最大数值为integer 的最大值,即 2147483647,这个数值我也没有试过,如果用到的时候可以试一下。此方法在静态广播中实现

<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
</intent-filter>

3、异步广播(粘性消息)

动态广播:在代码中注册实现

public class DynamicBroadCast extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals("com.example.broadcast")) {   //当有多个标志时起作用,此处可省略//处理信息		}}}
public void reciverBroadCast(){receiver = new DynamicBroadCast();IntentFilter filter = new IntentFilter();filter.addAction("com.example.broadcast");  //过滤标志registerReceiver(receiver, filter);   //动态注册}
注册时建议在onResume()中注册(与activity生命周期绑定)

@Overrideprotected void onResume() {super.onResume();reciverBroadCast();//注册}
取消时建议在onPause()中

@Overrideprotected void onPause() {super.onPause();if (receiver !=null) {unregisterReceiver(receiver);  //取消注册}}
在与service生命周期绑定时为oncreat()和ondestroy()中






这篇关于BroadcastReceiver广播传递信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593210

相关文章

第一行代码学习笔记:关于BroadcastReceiver的实现方式

第一行代码学习笔记:关于BroadcastReceiver的实现方式 方法1 动态注册方法2 发送广播时设置intent.setComponent方法3 发送广播时设置intent.addFlags 最近在学习郭霖大神的第一行代码第二版,在进行自定义广播部分的实例练习时发现点击按钮后未能接收到广播消息,经过代码排查和度娘查询才知道原来是8.0版本开始已经不支持大部分的静态注册广播

android面试:如何理解 Android 中的广播?

在 Android 中,广播是一种用于在应用程序之间传递消息的机制。它允许应用程序发送和接收全局消息,通常用于通知其他应用或组件某些事件的发生。广播可以是系统广播(由系统发送)或自定义广播(由应用程序发送)。 广播的主要特点: 异步通信:广播是一种异步的通信方式,发送广播的应用不需要等待接收应用的响应。 全局可见:广播可以被系统中的任何应用程序接收,适合用于跨应用的消息传递。 轻量级:广播

Android 接收系统广播,开机启动Service,SMS,Battery

本文内容摘自《疯狂Android讲义 第3版》李刚 著 自动开启的Service: package shortcut.song.com.myapplication;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;im

Android Ordered Broadcast 有序广播

代码设置IntentFilter: IntentFilter intentFilter = new IntentFilter();intentFilter.setPriority(15);intentFilter.addAction("shortcut.song.com.myapplication.MY_BROADCAST");intentFilter.addCategory

Android BroadcastRecevier广播消息

代码注册Receiver @Overrideprotected void onCreate(Bundle savedInstanceState) {IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("");MyBroadcast myBroadcast = new MyBroadcast();regi

2024全球广播摄像机市场前景如何?IP网络化云端融合趋势加强

一、前言 当前,全球广播电视用户持续向流媒体迁移。大多数国家广播电视台推出独立流媒体平台,流媒体趋势日渐加强。与奈飞等非广电系流媒体平台只提供点播服务不同,广电系流媒体平台一般提供电视频道直播服务、电视回看服务、视频点播服务,与传统电视渠道形成互补,而这些流媒体平台与网络媒体平台所能提供的视频服务存在着非常重合的区域。 (1)流媒体时代加速广播摄像机专业影视化发展 全球广电系流媒体平台竞争力

单播、广播、多播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上

RocketMQ广播消费消息

1、 基础概念 RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。 集群消费模式(Cluster): 在集群消费模式下,同一个消费者组(Consumer Group)中的每个消费者都会消费消息的一个副本。消息会被分发到不同的消费者实例上,但是同一个消息只会被同一个消费者组中的一个消费者消费。 广播消费模式(Broadcast)

IOS消息分发(广播)机制

在IOS中,提供了通知机制(Notification),可以在对象间传递和接受信息。传递和接受信息的对象间甚至不需要知道对方的存在。究其本质来说,其实是设计模式中的观察者模式的应用。 通知机制 设想这么一个场景:我开发了一款pdf阅读器,当手机上的另一个App打开pdf文件时,通过Open in,选择我的pdf阅读器打开。这时候我的pdf阅读器会被lanuch,同时在其App deleg

神奇的android广播

最近用了android的广播,个人感觉非常好用: 首先在你要接收的地方注册一个: context.registerReceiver(myReceiver, new IntentFilter("com.shic.action.d")); 然后就是定义注册的这个,在接收到广播后执行的操作: BroadcastReceiver myReceiver = new BroadcastRecei