it-swarm.com.de

Android 8.0 Oreo WLAN-Liste nicht erhalten

Auf Android 8.0 , keine WLAN-Liste mit wifiManager abrufen, unter API-Ebene 26 bekomme ich die Liste.

Diese Funktion gibt das WifiManagerObject zurück  

public static WifiManager getWifiManager(Context context) {
        WifiManager wifiManager = null;
        try {

            wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        } catch (NullPointerException e) {
            e.printStackTrace();
        }

        return wifiManager;
    }

Diese Funktion gibt die WLAN-Liste zurück

public static List<ScanResult> getWifiScanResults(Boolean sorted, Context context) {
    WifiManager wifiManager = NetworkUtil.getWifiManager(context);
    List<ScanResult> wifiList = wifiManager.getScanResults();

    //Remove results with empty ssid
    List<ScanResult> wifiListNew = new ArrayList<>();
    for (ScanResult scanResult : wifiList) {
        if (!scanResult.SSID.equals(""))
            wifiListNew.add(scanResult);
    }
    wifiList.clear();
    wifiList.addAll(wifiListNew);

         return wifiList;
}

Ich hatte den BroadcastReceiverregistriert.

WiFiMainActivity.this.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

und hier ist die startScan () - Methode

   public static void startScan(Context context) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        wifiManager.startScan();
    }

Benutzer mit folgender Berechtigung  

  <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" />

Kann den Fehler nicht auf Android 8.0 Oreo verfolgen, gibt es eine andere Berechtigung, die ich vermisse. 

7
Kumar Jadhav

Da in Android 8 eingeführt wurde, werden die Hintergrundausführungsbeschränkung die meisten in BroadcastReceiver registrierten Manifest-Aktionen nicht mehr gesendet oder empfangen, außer diese .

Ja, Sie registrieren es über Ihre Context, aber möglicherweise ist Ihr Code falsch.

Sie sollten es durch Ihren Application Context anstelle Ihres Activity Context registrieren, um Speicherverluste zu vermeiden. Versuchen Sie auch, eine Void IntentFilter zu erstellen und anschließend Ihre Aktion hinzuzufügen. Dieser Code funktioniert in meiner Anwendung gut mit targetSdkVersion 26+ in Android 8 Oreo (Nexus 5X).

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("Android.net.wifi.SCAN_RESULTS");
context.registerReceiver(new YourBroadcastReceiver(), intentFilter);

Ich hoffe das hilft.

7
Marc Estrada

Auf Ihrem 8.0-Android-Gerät muss Location aktiviert sein, damit Wifimanager funktioniert.

2
MA700