从Android 4.1开始,您的设备可以检测是否连接到移动热点(假设移动热点也在运行Android 4.1或更高版本)。此外,您可以将网络标记为移动热点(Settings/Data Usage/Overflow menu/Mobile Hotspots)。
但是,作为开发者的我该如何检测它呢?因为它并没有存储在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