王学岗网络监听

网上找了好久,终于找到啦,自己改了下

 private var networkCallback = object : ConnectivityManager.NetworkCallback() {override fun onCapabilitiesChanged(network: Network,networkCapabilities: NetworkCapabilities) {super.onCapabilitiesChanged(network, networkCapabilities)//表明此网络连接验证成功if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {Log.d(TAG, "===当前在使用Mobile流量上网===");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {Log.d(TAG, "====当前在使用WiFi上网===");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {Log.d(TAG, "=====当前使用蓝牙上网=====");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {Log.d(TAG, "=====当前使用以太网上网=====");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {Log.d(TAG, "===当前使用VPN上网====");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {Log.d(TAG, "===表示此网络使用Wi-Fi感知传输====");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {Log.d(TAG, "=====表示此网络使用LoWPAN传输=====");} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {Log.d(TAG, "=====表示此网络使用USB传输=====");}}}override fun onAvailable(network: Network) {super.onAvailable(network)Log.e(TAG, "==网络连接成功,通知可以使用的时候调用====onAvailable===")}override fun onUnavailable() {super.onUnavailable()Log.e(TAG, "==当网络连接超时或网络请求达不到可用要求时调用====onUnavailable===")}override fun onBlockedStatusChanged(network: Network, blocked: Boolean) {super.onBlockedStatusChanged(network, blocked)Log.e(TAG, "==当访问指定的网络被阻止或解除阻塞时调用===onBlockedStatusChanged==");}override fun onLosing(network: Network, maxMsToLive: Int) {super.onLosing(network, maxMsToLive)Log.e(TAG, "==当网络正在断开连接时调用===onLosing===")}override fun onLost(network: Network) {super.onLost(network)Log.e(TAG, "==当网络已断开连接时调用===onLost===")}override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {super.onLinkPropertiesChanged(network, linkProperties)Log.e(TAG, "==当网络连接的属性被修改时调用===onLinkPropertiesChanged===")}}

注册与解除注册

    lateinit var connectivityManager: ConnectivityManageroverride fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {super.onCreate(savedInstanceState, persistentState)connectivityManager = this.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManagerconnectivityManager.registerDefaultNetworkCallback(networkCallback)}override fun onDestroy() {super.onDestroy()connectivityManager.unregisterNetworkCallback(networkCallback)}

另有工具类(也是复制粘贴大佬们的)

@SuppressLint("NewApi")
public class NetworkUtils {private static final String TAG = "ConnectManager";/*** Indicates this network uses a Cellular transport.*/public static final int TRANSPORT_CELLULAR = 0;/*** Indicates this network uses a Wi-Fi transport.*/public static final int TRANSPORT_WIFI = 1;/*** Indicates this network uses a Bluetooth transport.*/public static final int TRANSPORT_BLUETOOTH = 2;/*** Indicates this network uses an Ethernet transport.*/public static final int TRANSPORT_ETHERNET = 3;/*** Indicates this network uses a VPN transport.*/public static final int TRANSPORT_VPN = 4;/*** Indicates this network uses a Wi-Fi Aware transport.*/public static final int TRANSPORT_WIFI_AWARE = 5;/*** Indicates this network uses a LoWPAN transport.*/public static final int TRANSPORT_LOWPAN = 6;/*** Indicates this network uses a Test-only virtual interface as a transport.* @hide*/public static final int TRANSPORT_TEST = 7;/*** Indicates this network uses a USB transport.*/public static final int TRANSPORT_USB = 8;/*** >= Android 10(Q版本)推荐** 当前使用MOBILE流量上网*/public static boolean isMobileNetwork(Context context) {ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** >= Android 10(Q版本)推荐** 当前使用WIFI上网*/public static boolean isWifiNetwork(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/***  >= Android 10(Q版本)推荐** 当前使用以太网上网*/public static boolean isEthernetNetwork(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** >= Android 10(Q版本)推荐** NetworkCapabilities.NET_CAPABILITY_INTERNET,表示此网络应该(maybe)能够访问internet**  判断当前网络可以正常上网*  表示此连接此网络并且能成功上网。  例如,对于具有NET_CAPABILITY_INTERNET的网络,这意味着已成功检测到INTERNET连接。*/public static boolean isConnectedAvailableNetwork(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return false;}NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);if (null == capabilities) {return false;}return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);}/*** >= Android 10(Q版本)推荐** 获取成功上网的网络类型* value = {*    TRANSPORT_CELLULAR,   0 表示此网络使用蜂窝传输。*    TRANSPORT_WIFI,       1 表示此网络使用Wi-Fi传输。*    TRANSPORT_BLUETOOTH,  2 表示此网络使用蓝牙传输。*    TRANSPORT_ETHERNET,   3 表示此网络使用以太网传输。*    TRANSPORT_VPN,        4 表示此网络使用VPN传输。*    TRANSPORT_WIFI_AWARE, 5 表示此网络使用Wi-Fi感知传输。*    TRANSPORT_LOWPAN,     6 表示此网络使用LoWPAN传输。*    TRANSPORT_TEST,       7 指示此网络使用仅限测试的虚拟接口作为传输。*    TRANSPORT_USB,        8 表示此网络使用USB传输* }*/public static int getConnectedNetworkType(Context context) {ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);Network network = cm.getActiveNetwork();if (null == network) {return -1;}NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);if (null == capabilities) {return -1;}if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {return NetworkCapabilities.TRANSPORT_CELLULAR;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {return NetworkCapabilities.TRANSPORT_WIFI;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {return NetworkCapabilities.TRANSPORT_BLUETOOTH;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {return NetworkCapabilities.TRANSPORT_ETHERNET;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {return NetworkCapabilities.TRANSPORT_VPN;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {return NetworkCapabilities.TRANSPORT_WIFI_AWARE;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {return NetworkCapabilities.TRANSPORT_LOWPAN;} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {return NetworkCapabilities.TRANSPORT_USB;}}return -1;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SLAM十四讲-9.3 实践Ceres BA-BAL数据集problem-16-22106-pre.txt分析】

数据集Dubrovnik Dataset 杜布罗夫尼克数据集的链接:Bundle Adjustment in the Large https://grail.cs.washington.edu/projects/bal/ problem-16-22106-pre.txt.bz216 22106 83718(这里是第1行) 0 0 -3.859900e02 3.871200e02&#x…

C#后台发送Get和Post请求的几种方法总结

本文主要介绍分别通过HttpClient、Flurl.Http、WebRequest和WebClient发送Get和Post请求的方法。 1、通过HttpClient发送Get和Post请求 适用平台:.NET Framework 4.5, .NET Standard 1.1, .NET Core 1.0 其它平台的移植版本可以通过Nuget来安装。 命名空间&…

Gson的用法详解

一、简介 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。 Gson官网:gson Gson源码地址:google/gson 二、依赖…

STM32F407-14.3.8-01强制输出模式

强制输出模式 在输出模式(TIMx_CCMRx 寄存器中的 CCxS② 位 00)下,可直接由软件将每个输出比较信号(OCxREF④ 和 OCx⑥/OCxN⑦)强制设置为有效电平或无效电平,而无需考虑输出比较寄存器和计数器之间的任何…

CMake构建工具

文章目录 CMake构建工具1.概念2.mk文件3.CmakeList4.预编译 CMake构建工具 1.概念 Android构建原始库的工具,对mk构建工具封装,还是makefile。 加载lib库 2.mk文件 //call调用test-dir这个方法,返回mk文件的路径,LOCAL_PATH这…

一文搞懂设计模式之责任链模式

大家好,我是晴天。我们又见面了,本周我们继续学习设计模式,本周将同大家一起学习责任链模式。 场景引入 我们回想一下自己曾经经历过的考学场景,我们是如何一步一步考上大学的(为了简化过程只提取核心环节&#xff09…

如何使用vue组件

目录 1:组件之间的父子关系 2:使用组件的三个步骤 3:components组件的是私有子组件 4:在main.js文件中使用Vue.component全局注册组件 1:组件之间的父子关系 一:首先封装好的组件是不存在任何的关系的…

springboot(ssm家政服务系统 家政预约平台Java(codeLW)

springboot(ssm家政服务系统 家政预约平台Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#xff09…

强化学习简明教程

到目前为止,我们主要关注监督学习问题(主要是分类)。 在监督学习中,我们得到某种由输入/输出对组成的训练数据,目标是能够在学习模型后根据一些新输入来预测输出。 例如,我们之前研究过 MNIST 的卷积神经网…

阅读笔记|A Survey of Large Language Models

阅读笔记 模型选择:是否一定要选择参数量巨大的模型?如果需要更好的泛化能力,用于处理非单一的任务,例如对话,则可用选更大的模型;而对于单一明确的任务,则不一定越大越好,参数小一…

Python简单模拟蓝牙车钥匙协议

本文设计一个简单的蓝牙车钥匙协议,协议包含DH密钥协商和基于RSA的身份认证功能,以及防重放与消息完整性验证。 1. 密钥协商过程: - 设定 DH 参数:素数 p 和生成元 g。 - 发送方(Alice)生成 DH 的私钥 a 并计算公钥 A…

.sketch的文件转.psd文件

我们不能直接把sketch 转成 psd格式,但是还是有迂回办法的!一起跟随我来看看吧 第一步: 在即时设计官网首页「文件导入」的下拉菜单里,选择「Sketch 文件导入」,然后将需要转换的 Sketch 文件导入,接着直接…

web前端之vue3

MENU vue3响应式数据的判断、isRef、isReactive、isReadonly、isProxy、ref、reactive、readonlyvue3的生命周期vue3手写isRef、isReactive、isReadonly、isProxyvue3手写ref、深的refvue3手写shallowRef、浅的refvue3customRefvue3readonly与shallowReadonlyvue3toRaw与markRa…

BearPi Std 板从入门到放弃 - 1 引气入体篇

安装相关开发工具 Keil MDK 工具下载 略, 自行体会 Keil 芯片支持包下载 Keil 包 网址 https://www.keil.com/pack 此处下载的是STM32L4xx的支持包 https://www.keil.com/pack/Keil.STM32L4xx_DFP.2.6.2.pack STM32CubeMX 下载与包下载 i. 下载(需要使用用户&…

DouyinAPI接口系列丨Douyin商品详情数据接口丨Douyin视频详情数据接口

抖音商品详情API是抖音开放平台提供的一套API接口,用于获取商品详情信息。通过该API,开发者可以获取到商品的详细信息,包括商品ID、名称、描述、价格、销量、评价等信息。 在使用抖音商品详情API之前,需要先注册并登录抖音开放平…

fl studio21.2最新汉化中文完整版网盘下载

fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件,很多用户不太理解,为什么新版本不叫fl studio 21或fl studio2024,非得直接跳到21.2版本,其实该版本是为了纪念该公司22周年,所以该版本也是推出…

系统监控:使用日志文件 journalctl的使用

journalctl 显示最近登录的: 上面有最近登录的时间,和系统操作 几十年来,Linux日志记录一直由syslogd守护进程管理。Syslogd将收集系统处理和应用程序发送到/dev/log伪设备的日志消息。然后,它会将消息定向到/var/log/目录中适当…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗?MacDroid Pro for Mac 是您的最佳选择!这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面,让您能够直接在Mac上…

人工智能和网络安全:坏与好

人工智能似乎可以并且已经被用来帮助网络犯罪和网络攻击的各个方面。 人工智能可以用来令人信服地模仿真人的声音。人工智能工具可以帮助诈骗者制作更好、语法正确的网络钓鱼消息(而糟糕的语法往往会暴露出漏洞),并将其翻译成多种语言&…

字符函数 和 字符串函数

今天我打算介绍一些字符函数和字符串函数,有一些字符串函数我实现了模拟,但文章中没有放出来,如果需要的欢迎来到我的gitee里面拿取(在test.c11-23里面) 这是我的gitee:小汐 (lhysxx) - Gitee.com 字符函数 1. islow…