当前位置: 首页 > news >正文

Android网络监听

1.通过注册BroadCastReceiver进行网络监听。

        1)  添加网络权限   

 <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

        2)定义BroadCastReceiver     

public class NetworkReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听// 特殊注意:如果if条件生效,那么证明当前是有连接wifi或移动网络的,如果有业务逻辑最好把esle场景酌情考虑进去!if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {//获取联网状态的NetworkInfo对象NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);if (info != null) {//如果当前的网络连接成功并且网络连接可用if (NetworkInfo.State.CONNECTED == info.getState() && info.isAvailable()) {Log.e("nyz", getConnectionType(info.getType()) + "已连接");switch (info.getType()) {case ConnectivityManager.TYPE_WIFI:Log.e("nyz", "wifi网络" + "已连接");break;case ConnectivityManager.TYPE_MOBILE:Log.e("nyz", "数据网络" + "已连接");break;}} else {Log.e("nyz", getConnectionType(info.getType()) + "已断开");}} else {Log.e("nyz", "无网络");}}}/*** 获取连接类型** @param type* @return*/private String getConnectionType(int type) {String connType = "";if (type == ConnectivityManager.TYPE_MOBILE) {connType = "3-4G网络数据";} else if (type == ConnectivityManager.TYPE_WIFI) {connType = "WIFI网络";}return connType;}
}

    需要注意的一点是 NetworkInfo 的两个方法:info.isConnected(); info.isAvailable();

    info.isConnected(),不推荐使用 了,推荐的是通过NetWorkCallBack的方式。

    通过这个方法判断网络是否可用是 return mState == State.CONNECTED;

判断的状态,和上面的Receiver中判断的方法是一样的。

  /*** Indicates whether network connectivity exists and it is possible to establish* connections and pass data.* <p>Always call this before attempting to perform data transactions.* @return {@code true} if network connectivity exists, {@code false} otherwise.* @deprecated Apps should instead use the*             {@link android.net.ConnectivityManager.NetworkCallback} API to*             learn about connectivity changes. See*             {@link ConnectivityManager#registerDefaultNetworkCallback} and*             {@link ConnectivityManager#registerNetworkCallback}. These will*             give a more accurate picture of the connectivity state of*             the device and let apps react more easily and quickly to changes.*/@Deprecatedpublic boolean isConnected() {synchronized (this) {return mState == State.CONNECTED;}}

  info.isAvailable(),从AndroidL开始总是返回true,所以用这个方法,不能准确判断,网络是否可用

/***Since Android L, this always returns {@code true}, because the system only* returns info for available networks. */
@Deprecatedpublic boolean isAvailable() {synchronized (this) {return mIsAvailable;}}

3)Activity中注册Receiver,在oDestroy中取消注册。

   private void registerNetWorkReceiver() {//注册网络状态监听广播netWorkReceiver = new NetworkReceiver();IntentFilter filter = new IntentFilter();filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(netWorkReceiver, filter);}@Overrideprotected void onDestroy() {super.onDestroy();if (netWorkReceiver != null) {unregisterReceiver(netWorkReceiver);}}

2.通过CallBack的方式监听网络:

    1)定义NetworkCallbackImpl类,继承ConnectivityManager.NetworkCallback

class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {@Overridepublic void onAvailable(@NonNull Network network) {Log.e("nyz", "网络已连接");}@Overridepublic void onLost(@NonNull Network network) {super.onLost(network);Log.e("nyz", "网络已断开");}@Overridepublic void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {super.onCapabilitiesChanged(network, networkCapabilities);if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {Log.e("nyz", "wifi 网络");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {Log.e("nyz", "蜂窝网络");} else {Log.e("nyz", "其他网络");}}}

     2)注册CallBack:

        mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkRequest request = new NetworkRequest.Builder().build();networkCallback = new NetworkCallbackImpl();mConnMgr.requestNetwork(request, networkCallback);

   3)反注册:

   @Overrideprotected void onDestroy() {super.onDestroy();mConnMgr.unregisterNetworkCallback(networkCallback);}

3.其他判断网络是否可用的方法:

     

    @SuppressLint("MissingPermission")public static boolean isNetworkAvailable(Context context) {ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if (connMgr == null) {return false;}NetworkInfo[] infos = connMgr.getAllNetworkInfo();if (infos != null) {for (NetworkInfo info : infos) {if (info.getState() == NetworkInfo.State.CONNECTED) {return true;}}}return false;}

     

   public static boolean isNetConnected(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();if (mNetworkInfo != null) {return mNetworkInfo.isConnected();}}return false;}

相关文章:

Android网络监听

1.通过注册BroadCastReceiver进行网络监听。 1) 添加网络权限 <uses-permission android:name"android.permission.INTERNET"/><uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" /> 2&#xff09;定义BroadCastRe…...

Kubernetes 常用命令 持续更新

1、进入指定namespace pod kubectl exec -it --namespacekube-system g-lsb-proxy-nginx-r7zfl-2522744936-11rld /bin/sh kubectl exec -it g-lsb-proxy-nginx-r7zfl-2522744936-9tz5k -n kube-system /bin/bash2、查看k8s pod详情 kubectl describe pods -n jiankunking …...

达梦数据库常用命令行

导出dmp文件&#xff08;迁移用&#xff09; 管理工具在dmdbms下的tool文件夹下 使用tool目录下的manage程序&#xff0c;导出dmp文件 导入dmp文件 切到tool目录下 ./dimp 用户id/密码ip:5236 file"导入的文件路径(包括文件名)" 导入的模式&#xff08;一般与库名…...

【通信系列 6 -- AT 命令介绍】

文章目录 1. 背景介绍1.2 AT的命令格式1.3 AT指令用法1.3.1 指令执行结果 1.2 CP 常用AT指令1.2.1 CP 模式设置1.2.2 网络相关1.2.3 IP获取1.2.4 Band 设置1.2.5 电话相关1.2.6 SIM卡检测1.2.7 cmwap 和cmnet1.2.8 AT 写 IMEI 1. 背景介绍 AT 命令一般分为三种&#xff1a; C…...

flask捕获@app.errorhandler/@app.after_request全局异常总结

捕获处理全局异常的方法有两种&#xff1a;app.errorhandler、app.after_request1、第一种的使用&#xff0c;需要将flask的debug开关打开才能生效&#xff08;自动捕获异常&#xff09;&#xff0c;在config里面将DEBUG TRUE就可以&#xff08;默认是False&#xff09;。 但是…...

智能晾衣架丨以科技解放双手

以往的晾衣架大多是平放式、手摇式居多&#xff0c;为衣物的晾晒提供了一个“栖身之所。”随着科技的日新月异&#xff0c;智能家居的产品越来越多。晾衣架也不例外&#xff0c;一款带有语音控制升降、同时具备照明和消毒的多功能衣架也已深入生活&#xff0c;正被人们所接受。…...

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…...

Pushgateway的场景使用

1,Pushgateway简介 Pushgateway为Prometheus整体监控方案的功能组件之一,并做为一个独立的工具存在。它主要用于Prometheus无法直接拿到监控指标的场景,如监控源位于防火墙之后,Prometheus无法穿透防火墙;目标服务没有可抓取监控数据的端点等多种情况。在类似场景中,可通…...

时间范围配置(昨天,今天,本周,本月,本季度,本年)

ranges:{ ‘昨天’: [ moment(moment().subtract(1, ‘days’).format(‘YYYY-MM-DD 00:00:00’)) ,moment(moment().subtract(1, ‘days’).format(‘YYYY-MM-DD 23:59:59’))], ‘今天’: [ moment(moment().format(‘YYYY-MM-DD 00:00:00’)),moment( moment().format(‘YYY…...

PlantUML 绘图

官网 https://plantuml.com/zh/ 示例 绘制时序图 USB 枚举过程 PlantUML 源码 startuml host <-- device : device insert host note right : step 1 host -> device : get speed, reset, speed check note right : step 2 host -> device …...

spring boot自定义配置时在yml文件输入有提示

自定义一个配置类&#xff0c;然后在yml文件具体配置值时&#xff0c;一般不会有提示&#xff0c;这个解决这个问题 依赖 <!--自定义配置类&#xff0c;在yml文件写的时候会有提示--><dependency><groupId>org.springframework.boot</groupId><arti…...

Linux:I/O 5种模型

图片来源&#xff1a;https://pdai.tech/md/java/io/java-io-model.html...

企业提升效率的秘密武器,推荐J2L3x聊天软件!

随着企业竞争加剧&#xff0c;提高效率已成为每个企业都必须面对的挑战。然而&#xff0c;企业要想提高效率&#xff0c;仅仅依靠员工的努力往往难以取得显著的效果&#xff0c;因此&#xff0c;许多企业开始寻找适合自己的工具和软件来提高生产力。 有一种聊天软件与众不同&a…...

Android Termux安装MySQL,并使用cpolar实现公网安全远程连接[内网穿透]

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…...

如何有效管理公司分配给员工的个人微信,实现聚合聊天管理?

现在很多公司会在员工入职后&#xff0c;会把企业的微信账号分配给员工&#xff0c;让他们用微信与客户沟通业务。但这个过程有很多风险&#xff0c;比如不能实时掌握员工与客户的沟通情况&#xff0c;可能出现员工私自添加或删除重要客户&#xff0c;有的员工还会离职时带走公…...

【HTML5】语义化标签记录

前言 防止一个页面中全部都是div&#xff0c;或者ul li&#xff0c;在html5推出了很多语义化标签 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 常用语义化案例 一般我用的多的是header&#xff0c;main&#xff0c;footer 这些标签不难理解&#x…...

数据结构———— 堆

(一)基础补充 满二叉树是每一层节点都放满的二叉树。 完全二叉树是只有最后一层节点右边不放满的二叉树。 满二叉树(Perfect Binary Tree) 如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。另一种说法:一个深度为k(>=-1)且有2^(k+1) - 1个结…...

如何选择专业的游戏开发公司?

如果你想找一家专业的游戏开发公司&#xff0c;你可以采取以下步骤来寻找合适的合作伙伴&#xff1a; 定义项目需求&#xff1a;首先&#xff0c;明确你的游戏开发项目的需求和目标。确定你需要什么类型的游戏&#xff08;移动游戏、PC游戏、主机游戏等&#xff09;、游戏类型…...

Unity基础课程之物理引擎3-碰撞检测案例-吃金币并加分显在UI文本框上

业务逻辑&#x1f4bc;&#xff1a; 这个脚本的主要功能是用于显示和更新主角的得分。在游戏中&#xff0c;玩家需要吃到金币来增加分数&#xff0c;而这个脚本就是负责将得分的变化实时显示在屏幕上的。 程序逻辑&#x1f4bb;&#xff1a; 1️⃣首先&#xff0c;在脚本的开始…...

DAPLink V2 STLink V2 JLink V9.7 串口四合一仿真调试下载器

作者 风陵&#xff1a; github:https://github.com/ForlingTec CSDN:https://blog.csdn.net/weixin_42518229 化作尘&#xff1a; https://blog.csdn.net/mbs520 一、产品介绍 该产品是一款基于USB2.0接口支持多个公司及多种内核的仿真器/编程器&#xff0c;板载了USB H…...

Phi-3-mini-128k-instruct创意写作效果集锦:技术博客、邮件、周报一键生成

Phi-3-mini-128k-instruct创意写作效果集锦&#xff1a;技术博客、邮件、周报一键生成 每次打开文档&#xff0c;面对空白的页面&#xff0c;你是不是也有过那种“万事开头难”的感觉&#xff1f;特别是写技术博客、整理会议邮件、或者汇总项目周报的时候&#xff0c;明明脑子…...

别再只升级OpenSSH了!一次搞懂Linux离线环境下的依赖包管理与编译安装避坑指南

离线环境下的Linux软件编译&#xff1a;从OpenSSH升级到通用依赖管理方法论 当你面对一台无法连接互联网的Linux服务器时&#xff0c;软件升级和安装往往会变成一场噩梦。想象一下&#xff1a;你下载了最新版OpenSSH的源码包&#xff0c;满怀希望地执行./configure&#xff0c;…...

Kook Zimage真实幻想Turbo快速调试:找到属于你的幻想风格黄金参数组合

Kook Zimage真实幻想Turbo快速调试&#xff1a;找到属于你的幻想风格黄金参数组合 1. 认识Kook Zimage真实幻想Turbo Kook Zimage真实幻想Turbo是一款专为个人GPU设计的轻量化幻想风格图像生成系统。它基于Z-Image-Turbo极速文生图底座&#xff0c;通过独特的权重融合技术&am…...

解决QGroundControl或华科尔地面站因QT版本冲突导致的启动失败问题

1. 当QGroundControl或华科尔地面站打不开时该怎么办 遇到QGroundControl或华科尔地面站安装后无法启动的问题&#xff0c;很多用户第一反应是软件安装包损坏了。但实际上&#xff0c;这很可能是由于QT框架版本冲突导致的。QT是一个跨平台的C图形用户界面应用程序开发框架&…...

小波分解选型指南:如何为你的数据选择最合适的pywt小波函数(db4/haar/symlets对比)

小波分解选型指南&#xff1a;如何为你的数据选择最合适的pywt小波函数&#xff08;db4/haar/symlets对比&#xff09; 在信号处理领域&#xff0c;小波分解就像一把瑞士军刀&#xff0c;能够同时提供时域和频域的信息。但面对pywt库中琳琅满目的小波函数——从经典的Haar到复杂…...

VisionPro实战:CogGraphicCollection在工业检测中的5个高效用法(附代码)

VisionPro实战&#xff1a;CogGraphicCollection在工业检测中的5个高效用法&#xff08;附代码&#xff09; 在工业自动化领域&#xff0c;机器视觉系统正变得越来越智能和高效。作为康耐视VisionPro平台的核心组件之一&#xff0c;CogGraphicCollection为工程师提供了强大的图…...

OpenClaw:四大使用挑战与破局思路

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…...

ollama-QwQ-32B模型微调+OpenClaw:个性化自动化助手训练实录

ollama-QwQ-32B模型微调OpenClaw&#xff1a;个性化自动化助手训练实录 1. 为什么需要个性化AI助手&#xff1f; 去年处理法律文书时&#xff0c;我发现通用大模型对专业术语的理解总差那么点意思。一个简单的"请整理这份合同中的关键条款"指令&#xff0c;模型返回…...

Swin2SR惊艳效果展示:低清草稿图秒变4K高清作品集

Swin2SR惊艳效果展示&#xff1a;低清草稿图秒变4K高清作品集 你有没有遇到过这种情况&#xff1f;一张特别有感觉的AI生成图&#xff0c;可惜分辨率太低&#xff0c;放大后全是马赛克&#xff1b;一张珍贵的旧照片&#xff0c;像素模糊得看不清人脸&#xff1b;或者从网上找到…...

Unity卡牌UI框架实战:构建高性能游戏界面的深度策略

Unity卡牌UI框架实战&#xff1a;构建高性能游戏界面的深度策略 【免费下载链接】UiCard Generic UI for card games like Hearthstone, Magic Arena and Slay the Spire... 项目地址: https://gitcode.com/gh_mirrors/ui/UiCard 在卡牌游戏开发领域&#xff0c;UI交互的…...