如果在Android Pie上使用WiFiManger.getScanResults()返回空列表,或者在Android Oreo上使用WiFiManger.startScan()返回false,可以尝试以下解决方法:
检查权限:确保在AndroidManifest.xml文件中添加了以下权限:
请求运行时权限:在Android 6.0(Marshmallow)及以上版本中,需要动态请求运行时权限。请确保在适当的位置请求相关权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_LOCATION);
}
监听WiFi扫描结果:在Android Oreo及以上版本中,应使用BroadcastReceiver来监听WiFi扫描结果。首先创建一个BroadcastReceiver:
private final BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
List results = wifiManager.getScanResults();
// 处理WiFi扫描结果
}
}
};
注册BroadcastReceiver:在Activity的onCreate()方法中注册BroadcastReceiver,并请求WiFi扫描:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(wifiScanReceiver, intentFilter);
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
处理WiFi扫描结果:在BroadcastReceiver的onReceive()方法中处理WiFi扫描结果:
List results = wifiManager.getScanResults();
if (results != null && !results.isEmpty()) {
// 处理非空的WiFi扫描结果
} else {
// 处理空的WiFi扫描结果
}
请注意,在使用WiFi扫描相关功能时,确保已经获得了适当的权限,并根据不同的Android版本采取相应的处理方式。