首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个随机NetworkCallbacks (onAvailable)与来自ConnectivityManager的相同networkId

多个随机NetworkCallbacks (onAvailable)与来自ConnectivityManager的相同networkId
EN

Stack Overflow用户
提问于 2020-01-08 14:46:24
回答 1查看 663关注 0票数 9

我不明白为什么在随机时刻多次调用onAvailable,文档指出,如果网络发生变化,可以更多地调用它,但是onAvailable中的网络对象参数的属性总是相同的。我甚至比较了这些哈希码,它们是一样的.

这个问题发生在我的LG棒棒糖装置上。

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

onAvailable添加了APILevel21,在框架连接时调用了,并声明了一个可供使用的新网络。如果满足请求的网络发生更改,则可以多次调用此回调

编辑:我实现了回调中的其他方法,以检查是否触发了其他方法(onLosing、onUnavailable、onCapabilitiesChanged、onLinkPropertiesChanged),但这些方法都没有被调用

我有自己的NetworkManager,其中包含以下代码:

代码语言:javascript
复制
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));
    }
}

日志:

代码语言:javascript
复制
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]
...
EN

回答 1

Stack Overflow用户

发布于 2022-11-08 15:05:33

我们在运行安卓5的斑马MC18设备上遇到了同样的问题。我们的解决办法是检查最后一次onAvailable呼叫是否来自同一个网络,同时我们没有收到这个网络的onLost。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59648303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档