Android Q, WifiNetworkSpecifier теряет Wifi сразу после установления соединения - PullRequest
6 голосов
/ 30 января 2020
  @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);
}

Это код, который я использую, чтобы подключиться к новому Wi-Fi из моего приложения. Я получаю IP-адрес, символ Wi-Fi очень кратко виден в строке состояния. В следующий момент Wifi-Symbol исчезает, и снова отображается системный диалог для подключения к Wi-Fi.

Когда я отлаживаю обратный вызов, он выполняет методы, описанные в этом порядке:

  1. onAvailable
  2. onCapabilitiesChanged
  3. onBlockedStatusChanged (заблокирован: false)
  4. onCapabilitiesChanged
  5. onLost

все методы делают ничего (просто вызовите super.method ())

Оборудование: OnePLus 6 с Android Q

1 Ответ

1 голос
/ 05 марта 2020

Раньше я сталкивался с той же проблемой, позже изменил « 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 ()"обратный вызов. Теперь Wi-Fi не колеблется и не происходит сбоев.

...