建立连接后,通过 WifiNetworkSpecifier 的 Android Q Wifi 连接立即断开连接

Jay*_*nth 6 android wifi android-connectivitymanager android-10.0

我目前正在尝试连接到 wifi 网络。我使用了下面的代码。

        WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
                .setSsid(ssid)
                .setBssid(MacAddress.fromString(bssid))
                .setWpa2Passphrase(password)
                .build();

        NetworkRequest request = new NetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                .setNetworkSpecifier(specifier)
                .build();

        ConnectivityManager manager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

        manager.requestNetwork(request, new ConnectivityManager.NetworkCallback() {

            @Override
            public void onAvailable(@NonNull Network network) {
                ConnectivityManager.setProcessDefaultNetwork(network);
                super.onAvailable(network);
                NetworkInfo info = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                if (info != null && info.isConnectedOrConnecting()) {
                    if (!emitter.isDisposed()) {
                        emitter.onSuccess(true);
                    }
                } else {
                    if (!emitter.isDisposed()) {
                        emitter.onError(new RuntimeException("OS Disconnected"));
                    }
                }

            }

            @Override
            public void onUnavailable() {
                super.onUnavailable();
                if (!emitter.isDisposed()) {
                    emitter.onError(new RuntimeException("Could not connect Wifi"));
                }
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

问题:上面的代码适用于 Pixel 手机和诺基亚,但在 Oneplus 设备上,我得到了 toast连接成功toast,并且在此 wifi 断开连接后立即。wifi 符号在状态栏中非常短暂地可见。下一刻,Wifi-Symbol 消失,系统对话框再次可见,连接到 wifi。

下面给出了权限,并授予了位置权限,并且也在设备中启用了它。

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)

当我调试回调时,它会按照以下顺序执行方法:

  1. 可用()
  2. onCapabilitiesChanged()
  3. onBlockedStatusChanged(阻止:false)
  4. onCapabilitiesChanged()
  5. 丢失()

我已经提到了这些 Android Q,以编程方式连接到不同的 WiFi AP 以进行互联网
WiFi 网络连接不断断开 Android Q Wifi 网络请求 Api 连接问题在 android 10 (Q) Android Q 中,WifiNetworkSpecifier 在连接建立后立即失去 Wifi

我无法找到解决方案。

我在网络请求中遗漏了什么导致断开连接。或任何其他解决方案表示赞赏。

谢谢你。

ram*_*ncy 2

截至 2020 年 9 月,此问题在某些设备上似乎仍未得到解决,一加 6、诺基亚手机等似乎都展示了这种成功的连接循环。同时,如果您有一个 iOT 设备,您的应用程序正在尝试自动连接,但失败了,您可以在 onFail() 中尝试此操作,以关闭连接对话框并让您的用户优雅地进入 wifi 页面以手动连接。

        connectivityManager.bindProcessToNetwork(null);
        connectivityManager.unregisterNetworkCallback(networkCallback);
        AlertDialog.Builder alert = new AlertDialog.Builder(...);
        alert.setTitle(...);
        alert.setMessage(...);
        alert.setPositiveButton("OK",
          new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(intent);
            }
          });
        alert.show();
      }
Run Code Online (Sandbox Code Playgroud)