在Android 8.0上,无法使用wifiManager获取wifi列表,在API26级以下,我正在获取列表。
此函数返回 WifiManager
Object
public static WifiManager getWifiManager(Context context) {
WifiManager wifiManager = null;
try {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
} catch (NullPointerException e) {
e.printStackTrace();
}
return wifiManager;
}
此函数返回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;
}
我已经注册了BroadcastReceiver
WiFiMainActivity.this.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
,这里是startScan()方法
public static void startScan(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
}
具有以下权限的用户
<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" />
无法跟踪android 8.0 Oreo上的错误,是否有任何其他权限,我错过了。
发布于 2018-06-04 05:22:02
由于在Android 8
中引入了background execution limitation,因此除了these ones之外,在Manifest
中注册的大多数BroadcastReceiver
操作将不再被发送或接收。
是的,您正在通过您的Context
注册它,但可能您的代码是错误的。
您应该通过您的Application Context
而不是您的Activity Context
注册它,以避免内存泄漏。另外,尝试创建一个空的IntentFilter
,然后添加您的操作。这段代码在我的应用程序中与Android 8 Oreo
(Nexus5X)中的targetSdkVersion
26+一起工作得很好。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.wifi.SCAN_RESULTS");
context.registerReceiver(new YourBroadcastReceiver(), intentFilter);
希望这能有所帮助。
发布于 2018-03-26 11:20:29
您的8.0 android设备必须启用定位功能,wifimanager才能正常工作。
发布于 2019-12-17 21:08:37
您必须在运行时请求ACCESS_COARSE_LOCATION权限
@Override
public void onResume(){
super.onResume();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
}
}
}
https://stackoverflow.com/questions/49171173
复制相似问题