初识广播机制(监听网络状态的改变,监听网络是否可以使用)

Android-实时监听网络状态变化(观察者) 实现流程概括 首先,我们要实现实时监听,肯定要用到广播机制:Android系统在网络状态发生变化时会发送一条广播,所以我们首先要做的就是写一个广播接收器,接收这条广播。 那接收之后呢? 接收之后再通知所有的观察者,网络有变化了,这里就要用到观察者模式了。(不知道观察者模式也没关系,其实就和回调的机制差不多,不知道回调是什么的话…或许之后我会专门写一篇?) over,就这么简单。 1、工具类(准备考... 阅读详情

Android系统中的广播机制比较灵活,因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。

广播的类型主要可以分为以下两种:

1.标准广播(无序广播)  特点:无序、异步,几乎同时接收到

2:.有序广播  特点:有序、同步,根据优先级高低执行,可以被截断

 

标准广播(无序广播)Normal broadcast是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条消息,因为它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着无法被截断。

 有序广播Ordered broadcast则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有一个先后顺序的,优先级高的广播接收器就可以收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

 Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。比如手机开机完成后会发出一条广播,电池的电量发生变化发出一条广播,时间或时区发生改变也会发出一条广播,等待。如果想要接收到这些广播,那么我们就需要了解广播接收器,并学会使用它。

广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时,广播接收器就能够收到该广播,并在内部处理相应的逻辑。

注册广播的方式有两种:

第一种是静态注册,直接在AndroidManifest.xml中注册

第二种是动态注册,直接在代码中注册

那么该如何创建一个广播接收器呢?其实只需要新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法就行了。这样当有广播到来时,onReceive()方法就会得到执行。

我们这里通过动态注册的方式编写一个能够监听网路变化的程序。

MainActivity.java代码:

package com.example.administrator.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private NetworkChangeReceiver receiver;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new NetworkChangeReceiver();
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(MainActivity.this, "network changes", Toast.LENGTH_SHORT).show();
        }
    }
}

效果图:


Toast提示有点麻烦,下面我们换做TextView来显示文字,同时判断网络是否可用。

activity_main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textColor="@android:color/holo_orange_light"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

MainActivity.java代码:

package com.example.administrator.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.ExifInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {
    private NetworkChangeReceiver receiver;
    private IntentFilter intentFilter;
    private TextView tv_show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new NetworkChangeReceiver();
        intentFilter = new IntentFilter();
        //添加监听网络发生变化的Action,这是动态注册广播的常用方式,静态注册一般在AndroidManifest中添加<action/>标签
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(receiver, intentFilter);
        tv_show = (TextView) findViewById(R.id.tv_show);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()) {
                updateUI("network is available");
            } else {
                updateUI("network is unavailable");
            }

        }
    }

    private void updateUI(final String msg) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_show.setText(msg);
            }
        });
    }
}

因为要判断网络是否可用,所以需要在AndroidManifest中需要加上监听网络是否可用的权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.broadcasttest">

    <!--监听网络状态的权限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <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/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

注意、注意,现在的Android手机对于权限方面的控制很严格了,可能你在程序中已经加上了,然而手机真机中没有允许给予权限,网络状态的监听还是无法使用。

最后运行程序,实现效果图如下:

点击数据流量:

 

 

监听 Android 设备网络状态的理想实践 目录 1.Android 5.0 以下版本 2. Android 5.0 及以上版本 3.Android 7.0 及以上版本 4.代码实现 App都需要监听 Android 设备的网络连接状态,典型的例子就是在下载大文件前,需要判断当前是否正在使用 WIFI 网络,若是则下载;如果使用移动网络,则需要弹框提醒用户可能会消耗流量并扣费。 要监听网络状态,也需要考虑 Android 版本差... 阅读详情

相关推荐

动态注册广播接收器并监听网络变化(一个广播接收器的实例)

因为Android的权限机制,我们先要加上一条权限: <!-- 访问系统的网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 实现步骤: 实例化IntentFilter类 给IntentFilter的实例添加一个action 实例化创建好...

冰之沁泠的博客 2010

Android 网络动态监听和是否联网

App内部分3.使你的BaseActivity继承NetworkListenerHelper.NetworkConnectedListener并重写onNetworkConnected方法,这样当网络变化后,就会回调此方法,你就可以进行自己的逻辑处理了。App内部分功能需要动态监听网络,获取网络信息,IP等,此外部分界面的功能需要检测是否联网才可跳转,于是自己总结了下。原理:因为当手机的网络发生变化时,广播是可以监听到的,所以可以利用这一个特性进行监听,并发送到应用所需要的地方。第三步:新建网络监听工具类。

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 1200

Android广播接收器实现网络状态实时监听详解

在移动应用开发中,实时感知设备网络状态的变化是保障用户体验的重要环节。Android系统通过广播(Broadcast)机制为应用程序提供了监听系统事件的能力,其中网络连接状态的变更便是最常见的应用场景之一。本章将从整体视角介绍Android广播的基本概念、分类及其在实际开发中的作用,重点阐述为何需要使用广播来监听网络变化,并引出后续章节中关于理论分析与实践操作的深入探讨。我们将了解标准广播、有序广播、粘性广播与本地广播等类型的区别,以及它们在网络监听场景下的适用性。同时,简要说明。

weixin_34162851的博客 823

Android检测网络状态&监听网络变化

网络状态改变、用户信息改变(帐户的钱),第一时间就要想到用观察者模式来实现 广播接收者,简单地把网络的变化通过接口抛出去 package com.qkt.face.et.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.

guodashen007的博客 1万+

实现Android网络状态检测与监听的完整指南

从Android早期版本到如今的最新版本,网络状态检测技术经历了显著的发展。早期版本主要依赖于广播接收器(BroadcastReceiver)来监听网络状态变化,而新版本则引入了更为强大的API和组件,比如ConnectivityManager, NetworkCallback等。本章将带领读者从基础到高级,逐步深入了解Android网络状态检测技术,并提供最佳实践和案例分析。

weixin_35390379的博客 1446

Android网络监听(wifi情况下网络是否可用)

Android监听网络状态,同时在WiFi情况下判断WiFi是否可用

android 监听网络状态的变化及实战

今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到 打开 WiFi设置的界面等 非WiFi情况下是否 非WiFi情况下是否加载图片,是否播放视频等

徐公,微信公众号同名 5万+

STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册

摘要: 本文针对STM32嵌入式开发中LwIP TCP通信的高延迟问题(默认配置下延迟达10~20ms),提出纯软件优化方案,通过调整内存配置与TCP参数将延迟降至1ms。核心问题包括内存池不足、pbuf分配低效及Nagle算法拖累,优化步骤包括: 内存池扩容:增大MEMP_NUM_TCP_PCB至10、PBUF_POOL_SIZE至32,避免资源竞争; pbuf静态池分配:采用2048字节大块缓冲区匹配DMA传输,减少分块与拷贝; 关闭Nagle算法:设置TCP_NODELAY=1,禁用延迟确认以加速小包

weixin_42212753的博客 1707

Android 监听网络状态变化

Google在Android7.0时虽已对广播添加了限制,但是Android8.0后基于安全原因又一次加强了限制,且已声明:应用无法使用其清单的大部分隐式广播(即,并非专门针对此应用的广播)此注册方式即使退出应用后,仍然能够收到相应的广播。知道问题的原因之后的解决方案就简单了,既然CHANGE_NETWORK_STATE权限获取不到,那只好想办法打开WRITE_SETTINGS这个权限了。此处就是本文的核心内容了,网络的实时动态监听指的是全局实时监听网络状态,针对的对象非一个事件而是整个APP应用项目 ~

徐师兄的博客 2791

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 397

使用 ANSYS 实现铸造、凝固和熔炼的高级解决方案

凭借其强大的有限元分析 (FEA) 和计算流体动力学 (CFD) 功能,ANSYS 可以准确预测模具内的热和流体流动行为。总之,ANSYS 是铸件凝固和熔化领域的关键工具。其全面的仿真功能、工艺优化功能、材料特性分析和用户友好的界面使其成为旨在创新和改进制造工艺的工程师不可或缺的工具。通过利用 ANSYS,各行各业可以在铸造业务中实现更高的质量、效率和成本效益,从而为先进的制造解决方案铺平道路。ANSYS是一款领先的工程仿真软件,提供强大的功能来建模和优化这些复杂的热过程,从而显著提高生产效率和质量。

jkh920184196的博客 2108

Android--广播的使用实例(监听网络连接)

Android四大组件,除了activity外,用的最多的估计就是BroadcaseReceiver. 广播分为两种广播类型: 标准广播(无序) 有序广播 无序广播就是指所有的广播接收者都可以接收到所需要的信息,有序广播则不然,有序广播可根据优先级进行接收,中间可能会被拦截。 大家都知道,广播为Android四大组件之一,想要使用他必须要注册。 广播注册形式分为两种: 静态注册(清单文件中注

走着学磔的专栏 2650

IEEE Access投稿全流程:从LaTeX模板到Overleaf实战(附避坑指南)

本文详细解析了向IEEE Access期刊投稿的完整流程,重点介绍了如何使用LaTeX模板在Overleaf平台上高效撰写和格式化论文。内容涵盖模板选择、作者信息填写、公式图表排版、参考文献管理(BibTeX)以及投稿前的最终检查清单,旨在帮助研究者,尤其是LaTeX新手,规避常见技术问题,顺利完成符合期刊严格要求的稿件提交。

open4的博客 575

Android开发之使用广播监听网络状态变化

我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示。如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听。 使用广播机制来监听网络状态主要涉及到以下几点: 1.需要自己编写个网络广播接收器,该接收器继承BroadcastReceiver类,用来接收系统发出的广播。比如我自己写了个NetStatus...

weixin_30355437的博客 1116

RK3568平台开发系列:Android环境下CAN的使用

在RK3568平台上,我们可以利用Android环境中的API来实现CAN的使用。通过以上步骤,我们可以在Android应用中发送和接收CAN数据,并进行相应的处理。当接收到CAN数据时,将触发onMessageReceived回调方法,我们可以在这个方法中对接收到的数据进行处理。在上述代码中,我们指定了CAN的ID为0x123,数据为{0x01, 0x02, 0x03},并设置了标志位和周期。接收CAN数据需要注册一个监听器,并在监听器中处理接收到的数据。发送CAN数据需要指定CAN的ID和数据。

2301_79330513的博客 1912

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 721

关于android的广播机制里面的网络状态监听 (Fragment实现)

关于android的广播机制里面的网络状态监听 (Fragment实现) 方法比较简单,直接上代码了 首先在Fragment 里定义一个类

普羅●米修斯 ——— HelloWorld 1万+

【Burp入门第二篇】Chrome配置BurpSuite代理教程

1、配置Burp代理为127.0.0.1:80802、扩展商店添加插件switchyomega,修改服务器和端口为下图:3、打开代理,选择刚才添加的代理

等风来 8368

android 使用广播监听网络状态

手机可以随时监听网络状态,如果网络状态发生变化要及时的更新 app 信息通知用户。 实现这个需求,有个较好的办法(个人认为,你一定有更好的办法,希望分享),分享给大家! 随时监听,需要实现一个 service 在后台监听网络状态,那麽如何接收到网络状态发生变化的信息呢? 恩,当然是 BroadcastReceiver. 网络状态发生变化的时候,系统会

hbzh2008的专栏 1万+

保姆级教程:一步步创建 ABAP Text Table

有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4273

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android监测手机网络状态变化的广播

android手机网络发生改变系统会发出相应的广播,我们只需要注册该广播就可以实时监测手机网络的变化了。 首先我们创建一个广播NetworkChangedReceiver继承系统广播BroadcastReceiver,在onReceive方法中做对应网络变化的处理逻辑就可以了: public class NetworkChangedReceiver extends BroadcastRec

github_2011的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Android】广播机制

在Android中,广播(Broadcast)是一种消息,任何应用程序都可以发送广播消息,任何应用程序也都可以接收广播消息。广播通常用于通知应用程序某些事件的发生,比如系统启动、电量低、网络状态改变等。Broadcast Receiver(广播接收器):用于接收广播消息并响应这些消息的组件。Intent(意图):用于传递广播消息的数据结构。标准广播(Normal Broadcast)是完全异步的,所有接收器几乎同时接收广播,并且接收顺序是不确定的。

2301_79977698的博客 1667

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android--解决方案--用BroadcastReceiver监听手机网络状态变化

实现一个功能,可以有很多种方法,但我们所追求的是最适合于自己项目的那一种方法。 就比如app要判断网络状态,如果在每次使用网络的时候去判断一次网络状态的话,有些耗费时间。例如,你要在打开网页之前先判断网络是否畅通以及在下载图片之前判断网络类型,那么务必造成等待时间的增加。因此,我们可以尝试只需在手机网络状态变更的时候,去记录一下当前的网络状态到我们的app里,在使用网络的地方就无需再去主动检查网

程序员的良师益友 6569

Android连载19-广播机制之网络状态显示

一、我们创建一个新的android项目来进行演示广播机制中是如何显示网络状态的。 package com.example.broadcasttest2; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import a

weixin_44630050的博客 218

广播Broadcast收发步骤及对网络状态监听、开机广播、8.0无效解决

转载请注明出处:http://blog.youkuaiyun.com/mr_leixiansheng/article/details/53583161 步骤: 1、新建自己的广播类继承BroadcastReceiver并重写onReceive(一旦广播接收到设定接收的信息就会启动onReceive) 2、在Manifest中对广播注册声明(静态注册,此处就可以设置广播接收的信息) 3、主程序中发送...

Mr_Leixiansheng的博客 1125

广播机制-BroadCastReceiver

广播机制,显示生活中的广播就比如说村里的大喇叭,车上的收音机接收的广播FM广播,学校里的校园广播都是常见的广播,安卓中的广播和生活中的广播是十分类似的。

简单点的博客 1543
上一篇: Fragment碎片的基本使用(手机平板需要更好地兼容)
下一篇: 广播,实现强制下线功能(项目文件已上传GitHub)
Android_牧
博客等级 码龄9年 88粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值