web-dev-qa-db-fra.com

Connectez-vous au wifi in Android Q Programmatiquement

J'ai eu cette fonction pour se connecter dans le réseau WiFi, ci-dessous Android 10 Cela fonctionne bien, mais quand j'ai essayé sur Android 10, j'ai eu une connexion réussie mais sans internet , je savais que c'est n bug in Android 1 mais j'ai trouvé cela - Application qui peut se connecter au wifi de Android 10 sans problème. Je suis bloqué pendant des jours.

Ma fonction:

private void connectToWifi(String ssid, String password)
    {
        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            try {
                Log.e(TAG,"connection wifi pre Q");
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = "\"" + ssid + "\"";
                wifiConfig.preSharedKey = "\"" + password + "\"";
                int netId = wifiManager.addNetwork(wifiConfig);
                wifiManager.disconnect();
                wifiManager.enableNetwork(netId, true);
                wifiManager.reconnect();

            } catch ( Exception e) {
                e.printStackTrace();
            }
        } else {
            Log.e(TAG,"connection wifi  Q");

            WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
                .setSsid( ssid )
                .setWpa2Passphrase(password)
                    .build();

            NetworkRequest networkRequest = new NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .setNetworkSpecifier(wifiNetworkSpecifier)
                    .build();

             connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);


                 networkCallback = new ConnectivityManager.NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    super.onAvailable(network);

                     connectivityManager.bindProcessToNetwork(network);
                    Log.e(TAG,"onAvailable");
                }

                  @Override
                  public void onLosing(@NonNull Network network, int maxMsToLive) {
                      super.onLosing(network, maxMsToLive);
                      Log.e(TAG,"onLosing");
                  }

                  @Override
                public void onLost(Network network) {
                    super.onLost(network);
                    Log.e(TAG, "losing active connection");
                }

                @Override
                public void onUnavailable() {
                    super.onUnavailable();
                    Log.e(TAG,"onUnavailable");
                }
            };
            connectivityManager.requestNetwork(networkRequest,networkCallback);


        }
    }
11
Euphor08

Donc, la solution pour moi est compilée votre application avec Targetsdkversion 28 . et pour la connexion au wifi utilise cette fonction

connectToWifi(String ssid, String key)

c'est juste une solution de contournement pour le moment, en attente de Google de publier une solution pour ce bogue, pour plus d'informations que le problème rapporté à Google: issuTracker.google.com/issues/138335744 ====

public void connectToWifi(String ssid, String key) {

Log.e(TAG, "connection wifi pre Q");
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = "\"" + ssid + "\"";
wifiConfig.preSharedKey = "\"" + key + "\"";
int netId = wifiManager.addNetwork(wifiConfig);
if (netId == -1) netId = getExistingNetworkId(wifiConfig.SSID);

wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();

}

1
Euphor08

Vous pouvez essayer wifisuggestion API, je suis capable de vous connecter à les utiliser.

final WifiNetworkSuggestion suggestion1 =
            new WifiNetworkSuggestion.Builder()
                    .setSsid("YOUR_SSID")
                    .setWpa2Passphrase("YOUR_PRE_SHARED_KEY")
                    .build();
    final List<WifiNetworkSuggestion> suggestionsList =
            new ArrayList<WifiNetworkSuggestion>();
    suggestionsList.add(suggestion1);

    WifiManager wifiManager =
            (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    int status = wifiManager.addNetworkSuggestions(suggestionsList);
    if (status == 0 ){
        Toast.makeText(this,"PSK network added",Toast.LENGTH_LONG).show();
        Log.i(TAG, "PSK network added: "+status);
    }else {
        Toast.makeText(this,"PSK network not added",Toast.LENGTH_LONG).show();
        Log.i(TAG, "PSK network not added: "+status);
    }
0
Shailendra Suriyal

Si vous avez un accès root (racine ADB):

  1. Connectez-vous manuellement au réseau WiFi de votre choix.

  2. Tirez ces fichiers ADB:

adb pull /data/misc/wifi/WifiConfigStore.xml
adb pull /data/misc/wifi/WifiConfigStore.xml.encrypted-checksum
  1. Enregistrer dans un dossier qui désignerait le réseau WiFi:
Ex:  GarageWifi
Ex:  BusinessWifi

Copier à l'emplacement de votre choix. Ne modifiez pas les noms des fichiers que vous avez tirés.

  1. Chaque fois que vous souhaitez vous connecter à un réseau WiFi souhaité:
adb Push <location>\WifiConfigStore.xml /data/misc/wifi/
adb Push <location>\WifiConfigStore.xml.encrypted-checksum /data/misc/wifi/

adb reboot
0
Grayson Henry