建立连接后,通过 WifiNetworkSpecifier 的 Android Q Wifi 连接立即失去连接

标签 android wifi android-10.0 android-connectivitymanager

我目前正在尝试连接到 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"));
                }
            }
        });
    });

问题:上面的代码适用于 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"/>

当我调试回调时,它正在通过此顺序中的方法:
  • onAvailable()
  • onCapabilitiesChanged()
  • onBlockedStatusChanged(阻止:假)
  • onCapabilitiesChanged()
  • onLost()

  • 我已经提到了这些
    Android Q, programmatically connect to different WiFi AP for internet
    WiFi Network Connection keeps disconnecting on Android Q
    Wifi Network Request Api connection issue in android 10 (Q)
    Android Q, WifiNetworkSpecifier loosing Wifi immediately after connection is established

    我无法找到解决方案。

    网络请求中是否缺少任何导致断开连接的内容。或任何其他赞赏的解决方案。

    谢谢你。

    最佳答案

    截至 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();
          }
    

    关于建立连接后,通过 WifiNetworkSpecifier 的 Android Q Wifi 连接立即失去连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60660236/

    相关文章:

    Linux 无线 : ACK implementation

    android - 全屏 Intent 不启动 Activity,但在 Android 10 上显示通知

    android - requestCellInfoUpdate() 的正确用法是什么?

    暂停后不会恢复 Android 相机预览

    android - - 在 FFMPEG 中使用电影循环播放音频时最短不起作用

    ios - 如何在 iOS 编程中检查网络提供商名称?

    c++ - Windows 事件,当尝试连接 wifi 时

    android - 在 Android Q 上保存 .txt 文件

    java - 在 Canvas 上绘图并刷新

    java - 无法将列表 <> 保存到 SD 卡