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

问题描述 投票:6回答:1
  @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符号消失,系统对话框再次可见,以连接到wifi。

当我调试Callback时,它将按此顺序执行方法:

  1. onAvailable
  2. onCapabilitiesChanged
  3. onBlockedStatusChanged(已阻止:否)
  4. onCapabilitiesChanged
  5. onLost

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

硬件:带Android Q的OnePLus 6

android q
1个回答
1
投票

我之前也遇到过同样的问题,后来修改了如下的“ 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并没有波动,也没有发生故障转移。

© www.soinside.com 2019 - 2024. All rights reserved.