Auf Android 8.0 , keine WLAN-Liste mit wifiManager abrufen, unter API-Ebene 26 bekomme ich die Liste.
Diese Funktion gibt das WifiManager
Object 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 BroadcastReceiver
registriert.
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.
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.
Auf Ihrem 8.0-Android-Gerät muss Location aktiviert sein, damit Wifimanager funktioniert.