android判断wifi是否打开,Android判断WiFi和移动数据网络(GPRS)是否同时打开

2023-10-21 14:40

本文主要是介绍android判断wifi是否打开,Android判断WiFi和移动数据网络(GPRS)是否同时打开,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

判断 WiFi 是否打开

public static boolean isWiFiEnable(Context context) {

ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()

.getSystemService(Context.CONNECTIVITY_SERVICE);

if (connectivityManager == null) {

return false;

}

NetworkInfo info = connectivityManager.getActiveNetworkInfo();

return !((info == null) || (!info.isAvailable())) && info.getType() == ConnectivityManager.TYPE_WIFI;

}

判断 GPRS 是否打开

public static boolean isMobileEnable(Context context) {

ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()

.getSystemService(Context.CONNECTIVITY_SERVICE);

if (connectivityManager == null) {

return false;

}

NetworkInfo info = connectivityManager.getActiveNetworkInfo();

return !((info == null) || (!info.isAvailable())) && info.getType() == ConnectivityManager.TYPE_MOBILE;

}

判断 WiFi 与 GPRS 同开(1)

尝试:使用 isWifiEnable() 和 isMobileEnable() 联合判断。

public static boolean isAllEnable(Context context) {

return isWiFiEnable(context) && isMobileEnable(context);

}

结果:此方式无法判断 WiFi 与 GPRS 同开。

在 WiFi 和 GPRS 同时打开时系统默认使用 WiFi 网络,即networkInfo.getType() 的返回值是 TYPE_WIFI,所以isMobileEnable()的结果一定是false导致判断失败。

既然在 WiFi 和 GPRS 同时打开时可以准确判断 WiFi 的状态,那么先使用isWifiEnable()判断 WiFi 是否打开,再想办法替代isMobileEnable()判断 GPRS 是否打开即可。

public static boolean isAllEnable(Context context) {

if (isWiFiEnable(context)) {

// TODO 判断移动数据网络是否打开

} else {

return false;

}

}

判断 WiFi 与 GPRS 同开(2)

观察ConnectivityManager源码发现有这么一个函数:

e1548a515941

ConnectivityManager #getMobileDataEnabled().png

尝试使用反射调用该函数判断 WiFi 开启时 GPRS 的状态发现是可行的。

public static boolean isMobileEnableReflex(Context context) {

try {

ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()

.getSystemService(Context.CONNECTIVITY_SERVICE);

Method getMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("getMobileDataEnabled");

getMobileDataEnabledMethod.setAccessible(true);

return (Boolean) getMobileDataEnabledMethod.invoke(connectivityManager);

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

最终,可行的判断 WiFi 和 GPRS 同开的方式如下:

public static boolean isAllEnable(Context context) {

return isWiFiEnable(context) && isMobileEnableReflex(context);

}

这篇关于android判断wifi是否打开,Android判断WiFi和移动数据网络(GPRS)是否同时打开的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255040

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO