Android入门之动态BroadCast的使用教程

目录
  • BroadCast是什么
  • 动态Broad Cast演示例子
  • 围绕例子进行设计
  • 全代码
  • MainActivity
  • 运行后的效果

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);
    }
}

运行后的效果

以下是运行后的效果

到此这篇关于Android入门之动态BroadCast的使用教程的文章就介绍到这了,更多相关Android动态BroadCast内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android四大组件之broadcast广播详解

    目录 基础广播 两大类广播 广播的动态和静态注册 监听时间变化 监听系统启动案例 创建 receiver 设置权限 发送自定义广播 如何发送与接收 有序广播 基础广播 两大类广播 标准广播:异步执行,广播发出后所有 receiver 同时接收,无先后顺序,无法被截断: 有序广播:同步执行,类似于中间件,每个 receiver 拦截广播后有权将其下放到下一个 receiver 或者直接截断: 广播的动态和静态注册 动态注册:写在代码里面的监听事件: 静态注册:写在 manifest.xml 里面的

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

    目录 一.广播机制概述 二.广播接收者 1.广播接收者的创建 2.广播接收者的注册 三.广播的类型 1.无序广播 2.有序广播 一.广播机制概述 通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的.如果有重要通知,会发送一条广播来告知全校师生.为了便于发送和接收系统级别的消息通知,Android系统也引入了一套类似广播的消息机制. Android中的广播(Broadcast)机制用于进程/线程间通信,该机制使用了观察者模式,观察者模式是一种软件设计模式,该模式是基于消息的发

  • Android学习之Broadcast的简单使用

    本文实例为大家分享了Android学习之Broadcast的使用方法,供大家参考,具体内容如下 实现开机启动提示网络的广播 package com.example.luobo.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; impor

  • Android入门之源码开发基础教程

    本文讲述了Android入门之源码开发基础教程.分享给大家供大家参考,具体如下: 下载 Android 源码之后,接下来就是学习或者进行开发. 在开发之前,谈一些开发必备知识或者工具,工欲善其事必先利其器嘛! 在前面一篇<Android入门之使用eclipse进行源码开发的方法>中基本上说了开发使用工具. 但是我们如何使用模拟器开发呢?! 当然你去删除或者增加app到模拟器就不可以按常规来操作了,花 5 -10 分钟了解一下,如果你有需要. 0. 编译源码 直接在下载的源码根目录下面,执行:

  • Android入门之Adapter的简单使用教程

    目录 Adapter介绍 课程目标 Adapter介绍 开始进入高级一些的组件的讲解了,后面章节会大量使用到ListView,在讲ListView前就必须带着这个Adapter的概念去做讲解. Adapter其实就是MVC的概念, 举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计, 有人负责程序代码的编写如果要能够做到程序项目的分工就必须在程序的结构上做适合的安排. 上面就是Adapter以及继承结构图了,接着我们介绍一下实际开发中还用到的几个Adapter吧!

  • Android入门之SwitchButton的使用教程

    目录 介绍 课程目标 自定义SwitchButton的Thumb和Track 自定义Thumb 自定义Track SwitchButton交互事件发生时的代码 运行效果 开关off时 开关on时 介绍 SwitchButton是个什么样的东西呢?其实它就是一个开关.我们在手机应用中经常使用到的.我突然想到2012年我开发Android时,竟然使用了RadioButton来做开关这个梗. 其实SwitchButton文如其名,它就是一个“开”和“关”两个状态事件存在时使用的,最典型的SwitchB

  • Android入门教程之组件Activity的生命周期详解

    目录 返回栈 Activity 状态 1. 运行状态 2. 暂停状态 3. 停止状态 4. 销毁状态 Activity 的生存期 onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart() 完整生存期 可见生存期 前台生存期 Activity 回收处理 返回栈 Android 中的 Activity 是可以层叠的,我们每启动一个新的 Activity,就会覆盖在原有的 Activity 之上,然后点击 Ba

  • Android入门之Handler的使用教程详解

    目录 简介 项目结构 代码 前端 后端 简介 我们在前面的Android教程中已经提到过这么一件事:Android在启动后会有一个主线程.它不允许任何子线程去改变主UI线程里的内容. 这么做是为了妨止,万一有一个带有大事务的线程导致了渲染组件时间过长最终导致Android UI出现“闪退”.“崩溃”的保护机制. 而实际我们在Android操作里的确是会有一些“耗时”的事情而采用异步线程,如:首页打开时调用第三方地图定位API.调用第三方银行API来显示你的余额.调用第三方社保显示你的当前社保缴纳

  • Android入门之Toast的使用教程

    目录 介绍 课程目标 项目结构 前端代码 view_toast_custom.xml activity_main.xml 后端代码 MainActivity.java 介绍 本篇带来的是: Android用于提示信息的一个控件——Toast(吐司)!Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失! 非常常用!我们通过一个例子把Toast的使用讲透! 课程目标 我们的目标是实现2个Toast. 第一个Toast我们使用的是系统默认

  • Android编程实现动态更新ListView的方法

    本文实例讲述了Android编程实现动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.从今天起,每次学习的源代码都会打包上传,方便各位同学学习,注册帐号即可下载. 布局main.xml: <?xml

  • Android编程实现动态支持多语言的方法

    本文实例讲述了Android编程实现动态支持多语言的方法.分享给大家供大家参考,具体如下: 资源文件values/strings.xml中添加 <string name="current_language">English</string> <string name="test">test</string> 创建values-en文件夹,添加资源文件 strings.xml: <resources> <

  • Android入门之读写本地文件的实现

    目录 简介 课程目标 UI端 后端代码 运行效果 简介 为了这个系列,我的代码已经准备到了第150天了.接下来的内容会越来越精彩,我们也越来越开始进入Android的一些高级功能上的编程了.今天我们就要讲Android中对本地文件进行读写的全过程. 课程目标 输入文件名.输入文件内容后按[保存到SD卡],可以把文件保存到SD卡根目录: 输入文件名,按[读取SD卡中的文件],可以根据输入的文件名把文件内容显示成Toast: 搞清Android中对于SD卡读写时所需要的静态权限申请.动态权限申请:

  • Android 实现密码输入框动态明文/密文切换显示效果

    在项目中遇到需要提供给用户一个密码输入框明文/密文切换显示的需求,在网上搜索一圈都没有发现完整的实现,幸而找到了一个实现的思路. 先上效果图,看了录制屏幕gif的教程,无奈手机太旧系统版本不支持,只有上静态图了. 密码输入框动态明文/密文切换显示 当看到这个效果图的时候,相信你已经猜到大概的思路了.没错就是为我们的EditText设置drawableRight,图中的眼睛图片还有一个配对的,是从martial designde的网站下载的,当用户点击drawableRight时,先动态的改变dr

随机推荐