【发布时间】:2014-07-01 15:43:54
【问题描述】:
从 Android 4.1 开始,您的设备可以检测它是否连接到移动热点(假设移动热点也运行 Android 4.1 或更高版本)。此外,您可以选择将网络标记为移动热点(在设置/数据使用/溢出菜单/移动热点下)。
但是,作为 -user- 我的意思是开发人员,我该如何检测呢? WifiConfiguration中没有存储,在哪里呢?
一些背景:我想为 Android 构建一个简单的工具,用于检查您是否连接到您或 Android 已标记为移动热点的网络。如果是这样,它将检查是否没有其他(非热点)网络可用。如果是这样,它应该连接到这些其他网络,因为这些网络应该更快并且没有数据上限。为什么?因为我的手机和平板电脑经常连接到(移动)热点,即使有更好的网络可用。
这是我正在寻找的一些伪代码:
// Check if android has detected mobile hotspot
WifiManager wifiMgr = getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr .getConnectionInfo();
boolean isMobileHotspot = wifiInfo.isMobileHotspot;
2014 年 7 月 3 日更新
好吧,Matiash 的回答很好,但 ConnectivityManager.isActiveNetworkMetered() 只会返回当前网络的值。我确实需要它,所以它帮助了我,但它把我带到了我的工具/应用程序的下一部分:
如果设备连接到移动热点(或 Android 所称的“计量网络”),我想检查附近的接入点是否是更好的选择。所以我需要知道在我连接之前是否有任何已知的 AP (WifiManager.getConfiguredNetworks()) 也被标记为这样...
我有一个List<ScanResult> 和一个List<WifiConfiguration>,看起来他们都没有这个信息。
这让我回到了最初的问题:有没有办法在数据使用情况下检索移动热点(由 Android 和/或用户配置)?而这一次我的意思是他们所有人。
2014 年 7 月 7 日更新
我在 AOSP 问题跟踪器中发布了一个功能请求,以访问(只读)NetworkPolicyManager。请在这里投票:https://code.google.com/p/android/issues/detail?id=73206&thanks=73206&ts=1404719243
【问题讨论】:
-
你最好单独问一个问题“它把我带到我的工具/应用程序的下一部分”。我可能会缓存最近连接到的已知网络并在缓存中维护
isMetered标志。 -
是的,这就是我现在正在做的事情。将发布更新和/或打开一个新问题。谢谢:
-
有什么更新吗?你找到解决办法了吗?
-
不。我自己监控网络并跟踪计量网络,android 不允许检测到这一点
标签: android android-wifi