问题描述: 在Android应用中使用Wifi扫描器,并将扫描到的结果显示在ListView中,但是ListView中没有显示任何结果。
解决方法:
private WifiManager wifiManager;
private ListView wifiListView;
private ArrayAdapter adapter;
private List wifiList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiListView = findViewById(R.id.wifi_list);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
wifiListView.setAdapter(adapter);
wifiList = new ArrayList<>();
scanWifi();
}
private void scanWifi() {
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager.startScan();
}
private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
wifiList = wifiManager.getScanResults();
for (ScanResult result : wifiList) {
adapter.add(result.SSID);
}
unregisterReceiver(this);
}
};
private static final int REQUEST_CODE_PERMISSION = 1;
private String[] permissions = {Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.ACCESS_FINE_LOCATION};
@Override
protected void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (String permission : permissions) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(permissions, REQUEST_CODE_PERMISSION);
return;
}
}
}
scanWifi();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
scanWifi();
} else {
Toast.makeText(this, "需要权限才能扫描Wifi", Toast.LENGTH_SHORT).show();
}
}
}
以上就是解决Android Wifi扫描器在ListView中不显示结果的方法,通过添加权限、设置ListView布局、编写Wifi扫描代码以及动态请求权限,可以实现在ListView中显示Wifi扫描结果。