Android入门之动态BroadCast的使用教程
作者:TGITCIC 发布时间:2022-07-06 21:11:32
BroadCast是什么
BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,你有一条新的微信消息。。。这种都是使用BroadCast机制去实现的。
BroadCast分为静态和动态BroadCast两种。它们的区别是:
动态BroadCast是运行时发生的,它只有发生在APP运行后;
那么有一种消息如:开机监听、全局监听、无activity承载弹窗在开机时APP没有运行前告知你天气要变化了这种消息,这种消息就是用的“静态BroadCast“;
我们今天先从动态BroadCast入手。从今天开始我们后面很多教程都涉及到有一样东西即:Android权限。
对于Android权限,这一块知识比较零碎。而且在不同的Android版本间还有巨大的差异。主要分为:
Android 6以前版本
Android 6-10
Android 10以后
每个sdk版本对权限的调用、配置还各不相同,我们就见招折招吧。
动态Broad Cast演示例子
今天我们来做的例子是一个在应用启动后如果网络信号发生断/连后及时广播相应的消息给到应用的Activity。如下图:
在模拟器里用鼠标拖着屏幕的顶部黑框下一点然后按住鼠标不动往下拖动,就会出现一些“常用设置”。
在设置里里对着网络信号开关作开/关操作
你可以看到下方有浮动的Toast显示“网络状态发生改变”
围绕例子进行设计
1.我们写动态BroadCast,需要让一个Java类继承自:android.content.BroadcastReceiver;
2.覆写public void onReceive(Context context, Intent intent)方法,这个方法就是收到BroadCast后的处理逻辑所在了;
3.一定要记得把这个自己写的receiver注册到:AndroidManifest.xml文件中去。当然,你可以使用Android Studio的new->other->BroadCast Receiver来生成这个Receiver,它会自动帮你把这个Receiver的类注册到AndroidManifest.xml文件中去;
4.然后在Activity启动使IntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")添加应用对网络状态监听情况;
来看全代码吧。
全代码
Receiver在AndroidManifest中的注册
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DemoDynamicBroadCast"
tools:targetApi="31">
<receiver
android:name=".SimpleBroadCast"
android:enabled="true"
android:exported="true"></receiver>
<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>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>
Receiver-SimpleBroadCast
package org.mk.android.demo.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class SimpleBroadCast extends BroadcastReceiver {
private final static String TAG="DemoDynamicBroadCast";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"网络状态发生改变~",Toast.LENGTH_SHORT).show();
Log.i(TAG,">>>>>>网络状态发生改变");
}
}
这个Receiver很简单,就是在onReceive方法中输出一个Toast。
再来看activity端。
MainActivity
package org.mk.android.demo.broadcast;
import androidx.appcompat.app.AppCompatActivity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
SimpleBroadCast simpleBroadCast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//核心部分代码:
simpleBroadCast = new SimpleBroadCast();
IntentFilter itFilter = new IntentFilter();
itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(simpleBroadCast, itFilter);
}
//别忘了将广播取消掉哦~
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(simpleBroadCast);
}
}
运行后的效果
以下是运行后的效果
来源:https://blog.csdn.net/lifetragedy/article/details/128304625


猜你喜欢
- 1 初识Mybatis-Plus MyBatis-Plus简称 MP,是一个 MyBatis的增强工具,在MyBatis的基础上只做增强不
- 用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧? 其实实现这种功能,主要有两步: 1.判断
- 作为开发人员,掌握开发环境下的调试技巧十分有必要。我们在编写java程序的过程中,经常会遇到各种莫名其妙的问题,为了检测程序是哪里出现问题,
- 本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL)使用DAL的最大好处是通过直接使用一些类似in
- 第1 部分 hashCode的作用Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以
- JPA主键@Id,@IdClass,@Embeddable,@EmbeddedId1、自动主键默认情况下,主键是一个连续的64位数字(lon
- 本文所述为一个由C#编写的音乐播放器的主Form代码,里面有一些小技巧还是不错的,现共享给大家参考一下。里面有播放器背景设置、线程定义、调用
- 背景在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的
- 1. 单个属性yaml 内的属性如下:server: port: 80只需在成员变量上注解 @Value(“
- 前言最近想体验下最新版本的SpringBoot,逛了下官网,发现SpringBoot目前最新版本已经是2.6.4了,版本更新确实够快的。之前
- 微服务启动时报错2021-05-18 21:25:44.644 WARN 5452 — [tbeatExecutor-0
- C# 获取某个时间的0点0分和23点59分59秒,具体代码如下所示:C#获取当月第一天和最后一天当月第一天0时0分0秒:DateTime.N
- MD5加密MD5是由MD2、MD3、MD4演变过来的,虽然MD5加密算法现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还
- 这篇文章主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- IComparable<T>.NET 里,IComparable<T>是用来作比较的最常用接口。如果某个类型的实例需
- 1. 概述在这篇文章中,我们将使用Spring Boot实现一个基本的邮箱注册账户以及验证的过程。我们的目标是添加一个完整的注册过程,允许用
- 前言消息推送功能可以说移动APP不可缺少的功能之一,一般简单的推送我们可以使用第三方推送的SDK,比如极光推送、信鸽推送等,但是对于消息聊天
- 本文实例讲述了C#实现集合转换成json格式数据的方法。分享给大家供大家参考,具体如下:/// <summary>/// dat
- 上一篇:Android 10 App启动分析之进程创建篇(一)上一篇文章,我们探讨了App启动过程中进程创建及初始化的流程,这篇文章我们接着
- 本文实例总结了MFC程序设计常用技巧。分享给大家供大家参考。具体如下:1.属性页的添加:创建对话框的类,该类要从CpropertyPage继