2015-11-16 4 views
9

Android 6.0 hat einige Änderungen am WiFi-Verhalten vorgenommen und es bricht mein App-Verhalten und kann keine Lösung dafür finden.Android 6.0 Kann WifiKonfiguration nicht hinzufügen, wenn es bereits eine andere WifiKonfiguration für diese SSID gibt

Grundsätzlich dürfen Sie für Android 6.0 keine WifiConfiguration-Objekte ändern oder löschen, die nicht von Ihrer App erstellt wurden. Dies bedeutet, dass ich immer eigene WifiConfiguration-Objekte erstellen muss. Wenn es jedoch bereits eine Wifi-Konfiguration für einen bestimmten AP gibt, die vom Benutzer oder einer anderen App erstellt wurde, kann ich keine andere für diesen AP erstellen.

wifiManager.addNetwork (wifiKonfiguration) gibt -1 zurück. Dies funktioniert auf allen früheren Android-Versionen, aber nicht auf Android 6.0

So bin ich fest. Ist das ein Android-Fehler? Ich kann mir vorstellen, dass viele Entwickler darunter leiden sollten, wenn sie Apps für eigene Hardware entwickeln, die über einen eigenen WLAN Access Point verfügt.

+0

denke, das zu diesem Fehler verwandt ist https://code.google.com/p/android/issues/detail?id=199315 + die fusionierte eine – Matthias

+0

@Catalin, wie hast du dieses Problem gelöst? Wir stehen vor genau dem gleichen Problem. Der Standard-WLAN-Scanner von Android hat sich eine WLAN-Konfiguration für unser WLAN-Netzwerk erstellt, sodass unsere App keine Verbindung mehr zu ihr herstellen kann. Wie könnte ich die Kontrolle über mein eigenes Netzwerk zurückgewinnen? – Denis

Antwort

1

Ich denke, es hilft .... Ein paar Änderungen erforderlich ... WifiConfiguration Objekte, die von der App für jedes Mal, nicht erstellt werden. Die App hat keine Berechtigung, ein anderes Objekt zu erstellen ... Also müssen wir uns mit der vorherigen existierenden netID verbinden.

public void connectToWifi(){ 
    try{ 
     WifiManager wifiManager = (WifiManager) super.getSystemService(android.content.Context.WIFI_SERVICE); 
     WifiConfiguration wc = new WifiConfiguration(); 
     WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
     wc.SSID = "\"NETWORK_NAME\""; 
     wc.preSharedKey = "\"PASSWORD\""; 
     wc.status = WifiConfiguration.Status.ENABLED; 
     wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
     wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
     wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
     wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
     wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
     wifiManager.setWifiEnabled(true); 
     int netId = wifiManager.addNetwork(wc); 
     if (netId == -1) { 
      netId = getExistingNetworkId(SSID); 
     } 
     wifiManager.disconnect(); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.reconnect(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
private int getExistingNetworkId(String SSID) { 
    WifiManager wifiManager = (WifiManager) super.getSystemService(Context.WIFI_SERVICE); 
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); 
    if (configuredNetworks != null) { 
     for (WifiConfiguration existingConfig : configuredNetworks) { 
      if (existingConfig.SSID.equals(SSID)) { 
       return existingConfig.networkId; 
      } 
     } 
    } 
    return -1; 
} 

Und auch in Manifest-Datei Berechtigungen hinzufügen ...

Verwandte Themen