Android 8.0奥利奥wifi列表没有得到

Kum*_*hav 7 android wifi wifimanager

Android 8.0上,没有使用wifiManager获取wifi列表,在API级别26以下我得到了列表.

此函数返回WifiManagerObject

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

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

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

        return wifiManager;
    }
Run Code Online (Sandbox Code Playgroud)

此函数返回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;
}
Run Code Online (Sandbox Code Playgroud)

我注册了 BroadcastReceiver

WiFiMainActivity.this.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
Run Code Online (Sandbox Code Playgroud)

这是startScan()方法

   public static void startScan(Context context) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        wifiManager.startScan();
    }
Run Code Online (Sandbox Code Playgroud)

用户具有以下权限

  <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" />
Run Code Online (Sandbox Code Playgroud)

无法跟踪android 8.0 Oreo上的错误,是否还有其他任何我遗漏的权限.

Mar*_*ada 7

由于Android 8引入了后台执行限制BroadcastReceiver,Manifest因此除了这些操作之外,将不再发送或接收注册的大多数操作.

是的,您正在通过您的注册,Context但也许您的代码是错误的.

您应该通过您Application Context而不是您的注册Activity Context来避免内存泄漏.此外,尝试创建一个空格IntentFilter并在之后添加您的操作.这个代码在我的targetSdkVersion26+ in Android 8 Oreo(Nexus 5X)应用程序中运行良好.

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.wifi.SCAN_RESULTS");
context.registerReceiver(new YourBroadcastReceiver(), intentFilter);
Run Code Online (Sandbox Code Playgroud)

希望这有帮助.


小智 3

您的 8.0 Android 设备必须启用位置功能才能使 wifimanager 正常工作。