Sur Android 8.0 , ne pas obtenir la liste wifi à l'aide de wifiManager, niveau API inférieur à 26, je reçois la liste.
Cette fonction renvoie l'objet WifiManager
public static WifiManager getWifiManager(Context context) {
WifiManager wifiManager = null;
try {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
} catch (NullPointerException e) {
e.printStackTrace();
}
return wifiManager;
}
Cette fonction renvoie la liste wifi
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;
}
J'avais inscrit le BroadcastReceiver
WiFiMainActivity.this.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
et voici la méthode startScan ()
public static void startScan(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
}
Utilisateur ayant l'autorisation suivante
<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" />
Impossible de suivre le bogue sur Android 8.0 Oreo, existe-t-il une autre autorisation qui me manque?
Depuis que Android 8
a été introduit, les limitations d'exécution en arrière-plan la plupart des actions BroadcastReceiver
enregistrées dans Manifest
ne seront plus envoyées ni reçues, à l'exception de celles-ci .
Oui, vous l'enregistrez via votre Context
mais peut-être que votre code est erroné.
Vous devriez l'enregistrer via votre Application Context
au lieu de votre Activity Context
pour éviter les fuites de mémoire. Essayez également de créer une IntentFilter
vide et d'ajouter votre action par la suite. Ce code fonctionne correctement dans mon application avec targetSdkVersion
26+ dans Android 8 Oreo
(Nexus 5X).
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("Android.net.wifi.SCAN_RESULTS");
context.registerReceiver(new YourBroadcastReceiver(), intentFilter);
J'espère que cette aide.
L'emplacement doit être activé sur votre appareil Android 8.0 pour que wifimanager fonctionne.