Tim*_*ähr 6 networking android wifi android-wifi
我有一个问题android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET。根据JavaDocs的说法,“表明该网络应该能够访问Internet”。
不幸的是,这似乎无法正常工作-否则我在这里做错了。我输出了三种不同Wi-Fi网络的功能价值:
带有互联网访问的Wi-Fi。
没有互联网的Wi-Fi(我在此处手动禁用了互联网)。
公共热点(“ Telekom”热点)
在这三种情况下,功能值均为[ Transports: WIFI Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps]。
这是我的代码:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
boolean capability = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET
Run Code Online (Sandbox Code Playgroud)
true当与某些Wi-Fi连接时,布尔值始终为。
如果相关,则我测试过的设备正在Android 5.0.1(API 21)下运行。我将应用程序编译为API级别23。
小智 6
对于具有API 23+的设备,您可以检查标志NET_CAPABILITY_VALIDATED
@RequiresApi(api = Build.VERSION_CODES.M)
private static boolean hasInternetConnectionM(final Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager)context.
getSystemService(Context.CONNECTIVITY_SERVICE);
final Network network = connectivityManager.getActiveNetwork();
final NetworkCapabilities capabilities = connectivityManager
.getNetworkCapabilities(network);
return capabilities != null
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
}
Run Code Online (Sandbox Code Playgroud)
我在其他设备上对其进行了检查,并且工作正常。除了小米Redmi 3S MIUI 8-它会返回NET_CAPABILITY_VALIDATED进行Wi-Fi,而无需访问互联网。
对于API <23,我使用ping。
不幸的是,您不能依赖 NET_CAPABILITY_INTERNET && NET_CAPABILITY_VALIDATED,您只需关闭 wifi 路由器上的互联网(通过电缆或编程方式)并检查 - 即使在很长的延迟后,这两个参数也将是正确的。
| 归档时间: |
|
| 查看次数: |
3413 次 |
| 最近记录: |