Java 在API 29中获取isActiveNetworkMetered和isDefaultNetworkActive
当connectivityManager.getActiveNetworkInfo()在API 29中被弃用后,整合一个网络监控功能来区分计量(小区)和WiFi连接是一件非常困难的事情 我面临的问题有2个:Java 在API 29中获取isActiveNetworkMetered和isDefaultNetworkActive,java,android,android-10.0,Java,Android,Android 10.0,当connectivityManager.getActiveNetworkInfo()在API 29中被弃用后,整合一个网络监控功能来区分计量(小区)和WiFi连接是一件非常困难的事情 我面临的问题有2个: connectivityManager.isActiveNetworkMetered()--当WiFi和移动数据都打开时,它返回true(至少在我的模拟器上是这样,我无法在设备上检查)。当只打开WiFi时,它返回false,正如预期的那样 ConnectionManager.isDefaul
private static void monitorNetworks(){
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerNetworkCallback(
builder.build(),
ncb = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
scanAndSend();
}
@Override
public void onLost(Network network) {
scanAndSend();
}
@Override
public void onUnavailable(){
scanAndSend();
}
@Override
public void onCapabilitiesChanged (Network network,
NetworkCapabilities networkCapabilities){
boolean metered = !networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
Log.d(TAG, "NET_CAPABILITY_NOT_METERED: " +
String.valueOf(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)));
sendMetered(metered);
}
}
);
}
private static void scanAndSend(){
boolean is_connected = false;
if(connectivityManager.getActiveNetwork()==null) is_connected = false;
else is_connected = true;
sendConnectivityIntent(IS_NETWORK_AVAILABLE, is_connected);
}
private static void sendMetered(boolean metered) {
sendIntent(IS_NETWORK_METERED, metered);
}
private static void sendIntent(String val_name, boolean val) {
Intent intent = new Intent();
intent.setAction(CONNECTIVITY_ACTION);
intent.putExtra(val_name, val);
context.sendBroadcast(intent);
}
请注意,“计量”完全独立于所使用的技术(wifi vs cell)。有无限的手机计划和计量无线接入点。我明白了。。。但问题仍然存在:如果我同时启用了计量和非计量,isActiveNetworkMetered()将是真的——从表面上看,“计量”完全独立于所使用的技术(wifi vs cell)。有无限的手机计划和计量无线接入点。我明白了。。。但问题仍然存在:如果我同时启用了计量和非计量,那么isActiveNetworkMetered()将是真的——从表面上看