【问题标题】:Android Q, WifiNetworkSpecifier loosing Wifi immediately after connection is establishedAndroid Q,WifiNetworkSpecifier在建立连接后立即失去Wifi
【发布时间】:2020-05-15 23:30:50
【问题描述】:
  @RequiresApi(api = Build.VERSION_CODES.Q)
public void openSystemDialogToConnectToWifi(String ssid, ConnectivityManager.NetworkCallback callback) {
    WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
    builder.setSsid(ssid);
    builder.setWpa2Passphrase("secret");


    WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();

    NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
    networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
    networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED);
    networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);

    NetworkRequest networkRequest = networkRequestBuilder.build();
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.requestNetwork(networkRequest, callback);
}

这是我用来从我的应用程序连接到新 Wifi 的代码。 我得到了一个 IP 地址,wifi 符号在状态栏中非常短暂地可见。 下一刻,Wifi-Symbol 消失,系统 Dialog 再次可见,连接 wifi。

当我调试回调时,它正在执行此顺序中的方法:

  1. 可用
  2. onCapabilitiesChanged
  3. onBlockedStatusChanged(阻止:假)
  4. onCapabilitiesChanged
  5. onLost

所有方法什么都不做(只需调用 super.method())

硬件:带有 Android Q 的 OnePLus 6

【问题讨论】:

  • 我们看到了与 OnePlus 7T 非常相似的东西。你找到解决办法了吗?
  • 尚未找到解决方案
  • 你有解决办法吗?
  • 嘿,你有什么解决办法吗?
  • 这能回答你的问题吗? Connect to Wifi in Android Q programmatically

标签: android android-10.0


【解决方案1】:

我一直在跟踪和研究这一点。我的所有发现以及我当前的最佳解决方案都可以在 here

找到

但更具体的问题是从链接中获取的以下信息

here by Google 所述,一些 OEM Rom 没有“保持请求”,因此连接会立即断开。 OnePlus 在他们后来的一些型号中解决了这个问题,但不是全部。对于某些 Android 版本上的某些手机型号,此错误将持续存在,因此需要成功的回退(即没有网络中断的手动连接)。没有可用的解决方法

  • removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) 不会帮助在 OnePlus 上保持连接,如 here 所述

  • here 所述,设置 Bssid 无助于保持 OnePlus 上的连接

  • google 帮不上忙,他们说这不在他们的掌控之中here

  • OnePlus 论坛帖子确认它在更新后适用于某些型号(但不是全部),请参阅 hereherehere

【讨论】:

【解决方案2】:

我之前也遇到过同样的问题,后来修改了“NetworkRequest”如下

WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
    .setSsid(ssid)
    .setWpa2Passphrase(password)
    .build();
NetworkRequest networkRequest = new NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
        .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_FOREGROUND)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING)
        .setNetworkSpecifier(specifier)
        .build();

我刚刚删除了“onCapabilitiesChanged()”回调中给出的一些不需要的/默认网络功能。现在 wifi 没有波动,也没有发生故障转移。

【讨论】:

【解决方案3】:

创建新问题,因为旧问题已关闭https://issuetracker.google.com/u/1/issues/170406306

【讨论】:

  • 这没有提供问题的答案。请改写评论。
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2016-03-28
  • 2015-10-30
相关资源
最近更新 更多