web-dev-qa-db-fra.com

Android 8.0 Oreo wifi liste ne pas obtenir

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? 

7
Kumar Jadhav

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.

7
Marc Estrada

L'emplacement doit être activé sur votre appareil Android 8.0 pour que wifimanager fonctionne.

2
MA700