【发布时间】:2019-08-22 09:23:21
【问题描述】:
要求:- 需要运行一些网络呼叫,仅当设备仅连接到实际 WiFi 接入点,而不连接到移动热点或蜂窝数据时。
我们需要检查当前连接的网络是否为移动热点。目前,如果它连接到 WiFi 或蜂窝网络,我正在使用以下代码。
Network activeNetwork = connectivityManager.getActiveNetwork();
NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(activeNetwork);
boolean isWiFi = networkCapabilities.hasTransport(NetworkCapablities.TRANSPORT_WIFI);
为了确定 wifi 连接是否是移动热点,我尝试了一种解决方法,使用以下方法。
connectivityManager.isActiveNetworkMetered()
与主动连接计量检查一起,更新条件如下
boolean isWiFiNotAMobileHotspot = networkCapablities.hasTransport(NetworkCapablities.TRANSPORT_WIFI) && connectivityManager.isActiveNetworkMetered();
因为 isActiveNetworkMetered() 仅有助于识别我们是否连接了计量连接(具有每日/每月数据限制的限制。)
所以对于大多数移动热点,它给出了预期的结果,但如果移动热点有无限数据计划,那么 isActiveNetworkMetered() 返回 false。
因此,很遗憾,此解决方案并不是确定设备是否连接到移动热点的确切方法。
请帮助我检查设备是否连接到移动热点。
【问题讨论】:
-
一般来说
mobile hotspot和WiFi access point没有区别。事实上,每个mobile hotspot本身就是WiFi access point。同样,一些 WIFI 路由器具有 SIM 卡插槽或用于移动调制解调器连接的 USB。 -
感谢@Vladyslav 的更多解释,但我想检查移动热点/接入点的来源是否为 2G/3G/4G,然后我不得不忽略它。
-
我不认为您可以检查来源。我能想到的唯一一件事-通过IP地址检查ISP。因此,如果 ISP 在移动运营商列表中 - 那么它可能是移动网络
-
请你帮我看看如何从IP地址找到ISP的代码,以便我们弄清楚它是否是移动运营商。
-
没有这样的代码。你需要找到这样的在线API才能从IP地址获取ISP
标签: android