如果网络已经配置,Android 10 requestNetwork 对话框会持续显示

问题描述

在我的应用中,我尝试调用 ConnectivityManager.requestNetwork(networkRequest,networkCallback)提示用户连接到特定的 WiFi 网络。通常这会按预期工作;显示带有文本 Device to use with MyApp 的系统对话框,并找到 WiFi 网络。用户可以连接网络(或取消),网络连接成功。一切都按预期进行。

然而,这似乎只有在设备之前没有连接到网络的情况下才能正常工作。如果设备过去已经连接到该网络,则会一遍又一遍地显示 Device to use with MyApp 对话框。当它第一次显示时,我可以连接到网络并调用 onAvailable 回调。但是,在连接后立即再次显示该对话框。如果用户点击取消,则该对话框将关闭并且不会再次显示。但是,假设它们连接到网络,对话框总是会再次显示(甚至在 onAvailable 回调完成之前),并且模式会无限重复。

我只调用过一次 requestNetwork,即使我在 onAvailable 回调中放置了一个断点,到该断点被击中时,第二个对话框已经显示。再一次,这种在网络保存到设备时发生;如果设备尚未连接到网络,则该对话框仅显示一次。

我的代码如下,但我认为它没有做任何不寻常的事情。我还需要做些什么来防止这种情况发生?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    final NetworkSpecifier specifier =
            new WifiNetworkSpecifier.Builder()
                    .setSsid(ssid)
                    .build();
    final NetworkRequest request =
            new NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    .setNetworkSpecifier(specifier)
                    .build();

    mAndroidQNetworkCallback = new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            Log.d(TAG,"Connected to "+ssid+"!");
        }
        @Override
        public void onUnavailable() {
            Log.d(TAG,"NOT Connected to "+ssid+"!");
        }
    };
    mConnectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    mConnectivityManager.requestNetwork(request,mAndroidQNetworkCallback);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)