当前位置: 首页 > 知识库问答 >
问题:

如何判断‘移动网络数据’是启用还是禁用(即使是通过WiFi连接)?

伏建修
2023-03-14

我有一个应用程序,我希望能够使用从远程查询获得连接状态报告。

问题是,当我连接WiFi时,data enabled总是返回为true,只有当我不连接WiFi时,我才能正确地查询移动网络。

我看到的所有答案都建议轮询看看当前的连接是什么,但我想知道如果我需要移动网络是否可用,即使我目前可能通过WiFi连接。

是否有告诉移动网络数据是否启用,而不轮询看是否连接?

 boolean mob_avail = 
 conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isAvailable();

mob_avail返回为'true',但是我已经禁用了移动网络数据,所以我希望它是'false'

如果我关闭WiFi,没有连接(正确地),因为我已经禁用了移动网络数据。

那么当我通过WiFi连接时,如何检查移动网络数据是否启用?

WiFi关闭-移动数据打开

WiFi打开-移动数据关闭

WiFi打开-移动数据打开

在WiFi打开/移动打开的情况下

NetworkInfo:类型:Mobile[HSPA],状态:已断开/已断开连接,原因:connectionDisabled,额外:(无),漫游:false,故障转移:false,ISAvailable:true,featureID:-1,UserDefault:false

因此,正如您所看到的,isAvailable每次返回true,只有当WiFi受到影响时,状态才显示为断开连接。

共有1个答案

鲁昕
2023-03-14

下面的代码将告诉你是否启用了“移动数据”,而不管当前是否有移动数据连接激活,或者wifi是否启用/激活。 此代码只适用于Android2.3(姜饼)和更高版本。 实际上,这段代码也适用于早期版本的Android;-)

    boolean mobileDataEnabled = false; // Assume disabled
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    try {
        Class cmClass = Class.forName(cm.getClass().getName());
        Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
        method.setAccessible(true); // Make the method callable
        // get the setting for "mobile data"
        mobileDataEnabled = (Boolean)method.invoke(cm);
    } catch (Exception e) {
        // Some problem accessible private API
        // TODO do whatever error handling you want here
    }

注意:您需要具有权限Android.permission.access_network_state才能使用此代码。

 类似资料:
  • 本文向大家介绍Android判断网络类型的方法(2g,3g还是wifi),包括了Android判断网络类型的方法(2g,3g还是wifi)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android判断网络类型的方法。分享给大家供大家参考,具体如下: 判断网络类型是wifi,还是3G,还是2G网络,对不同的网络进行不同的处理,现将判断方法整理给大家,以供参考 说明:下面用到的数据移动2G

  • 问题内容: 我有一个页面可以通过Ajax加载其他页面(请考虑使用框架,除非没有框架)。 显然,这些页面都可以独立调用,因此我想检测是否通过Ajax调用了它们,如果不是,则重定向到主Ajax页面。 这些页面是php页面,因此我也可以访问它。 指数: 问题答案: 使用该对象进行请求时,现代浏览器会添加以下请求标头: 在PHP中,使用以下命令检查此标头的存在:

  • 本文向大家介绍如何判断是函数还是方法?相关面试题,主要包含被问及如何判断是函数还是方法?时的应答技巧和注意事项,需要的朋友参考一下 看他的调用者是谁,如果是类,就需要传入一个参数self的值,这时他就是一个函数, 如果调用者是对象,就不需要给self传入参数值,这时他就是一个方法 print(isinstance(obj.func, FunctionType)) # False print(isi

  • 我知道我们可以通过“adb shell svc wifi disable”命令关闭Wifi,但我不想完全关闭Wifi。我想通过adb与特定的ssid断开连接。可能吗? 编辑:我收到一个通知,说这个问题被认为是这个问题的重复:如何通过ADB关闭Wifi?。事实并非如此。正如第一段中明确提到的,我不想关闭wifi,只想简单地断开与特定网络的连接。这就像长按网络并点击“忘记网络”。本质上,我想模拟用户离

  • 本文向大家介绍Android判断用户2G/3G/4G移动数据网络,包括了Android判断用户2G/3G/4G移动数据网络的使用技巧和注意事项,需要的朋友参考一下 在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允

  • 本文向大家介绍javascript判断网页是关闭还是刷新,包括了javascript判断网页是关闭还是刷新的使用技巧和注意事项,需要的朋友参考一下 原理就是通过离开页面行为时间onunload触发时间去检测此时的浏览器的窗口大小,根据大小由此判断用户是刷新,跳转或是关闭行为程序  代码如下  用浏览器右上角的关闭按钮时好用,但在选项卡上关闭和在任务栏上关闭,这个方法就不作用了 js标签只有onlo