从Android4.1开始,您的设备可以检测它是否连接到移动热点(考虑到移动热点也运行Android4.1或更高版本)。此外,您还可以选择将网络标记为移动热点(设置/数据使用/溢出菜单/移动热点)。
,但作为一个用户,我指的是开发人员,如何检测到这一点呢?它没有存储在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之前,我需要知道是否有任何已知的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
发布于 2014-07-01 15:57:01
您可以通过调用ConnectivityManager.isActiveNetworkMetered()来访问此信息。
这将返回活动连接是否是热点(如数据使用->移动热点中定义的)。
关于第二部分,我很抱歉,但我认为那是不可能的。该标志不是公共的,即使您获得了可以通过反射检索它(android.net.NetworkPolicyManager)的对象:
Object npm = Class.forName("android.net.NetworkPolicyManager").getDeclaredMethod("from", Context.class).invoke(null, this);
Object policies = npm.getClass().getDeclaredMethod("getNetworkPolicies").invoke(npm);调用getNetworkPolicies()需要MANAGE_NETWORK_POLICY权限,而非系统应用程序不能获得MANAGE_NETWORK_POLICY权限,因为它具有“签名”保护级别。
不过,我希望被证明是错误的。)可能查看管理此信息的Android活动的源代码(settings/blob/master/src/com/android/settings/net/DataUsageMeteredSettings.java),特别是buildWifiPref()方法,将提供一些线索。
发布于 2014-07-01 16:17:44
我不知道你想要什么是可能的,但是你可以通过检查ip来检查你的设备是否连接到网络上。您可以使用下面的工具来查看您是否有ip,并且应该知道他是否连接到一个网络。
公共静态布尔.getSystemService(Context.CONNECTIVITY_SERVICE);check_connection(最终上下文_context) {布尔连接;ConnectivityManager conectivtyManager = (ConnectivityManager) _context _context if (conectivtyManager.getActiveNetworkInfo() != null & conectivtyManager.getActiveNetworkInfo().isAvailable() & conectivtyManager.getActiveNetworkInfo().isConnected()) { connected = true;}{ connected = false;}返回连接;}
发布于 2021-07-28 11:45:55
//Check if hotspot tethering is enabled
try {
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isMobileData = connectivityManager.isActiveNetworkMetered();
if(isMobileData) {
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : interfaces) {
if (networkInterface.getName().equals("ap0")) {
//Tethering is enabled
SendHotspotEnabledHandler sendHotspotEnabledHandler = new SendHotspotEnabledHandler(new WeakReference<Context>(SendInstalledAppsService.this));
sendHotspotEnabledHandler.execute();
break;
}
}
}
} catch (SocketException e) {
}https://stackoverflow.com/questions/24514387
复制相似问题