ConnectivityManager从网络中收到了具有相同networkId的多个随机NetworkCallbacks(onAvailable)。

9

我不明白为什么onAvailable会在随机时刻被多次调用,文档说明它可能因网络状态改变而被调用多次,但是onAvailable的网络对象参数的属性始终相同。我甚至比较了哈希码,它们都相同......

这个问题出现在我的LG棒棒糖设备上。

Android文档(https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback):

onAvailable API 21 引入 当框架连接并声明新网络可供使用时调用。如果满足请求的网络发生更改,则可能多次调用此回调。

编辑:我已经实现了回调中的其他方法来检查是否触发了其他方法(onLosing、onUnavailable、onCapabilitiesChanged、onLinkPropertiesChanged),但是没有任何一个方法被调用。

我有自己的NetworkManager,在其中添加了以下代码:

public void initialize(Context context) {
    connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    setState();
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        final NetworkRequest networkRequest = new NetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build();

        connectivityManager.registerNetworkCallback(networkRequest, new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(final Network network) {
                super.onAvailable(network);
                NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
                Log.d(TAG,"Network is Available. Network Info: " + networkInfo);
                notifyObservers();
            }

            @Override
            public void onLost(final Network network) {
                super.onLost(network);
                notifyObservers();
            }
        });
    } else {
        context.registerReceiver(new NetworkChangeReceiver(), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }
}

日志:

Network is Available. Network Info: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "company_guest", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
Network is Available. Network Info: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "company_guest", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
Network is Available. Network Info: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "company_guest", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
Network is Available. Network Info: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "company_guest", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
...
1个回答

3

我们在运行Android 5的Zebra MC18设备上遇到了相同的问题。我们的解决方法是检查最后一个onAvailable调用是否来自同一网络,同时我们在此期间没有收到该网络的onLost。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接