如何解决有没有一种新的方法或方式来扫描访问点而不是WifiManager.StartScan?
WifiManager.StartScan已在API 28中弃用 https://developer.android.com/reference/android/net/wifi/WifiManager#startScan()
你好! 我的应用程序需要使用WifiManager.StartScan()要求扫描附近的访问点,但它已正常工作,但是现在我将targetSdkVersion和compileSdkVersion更改为API 29 i不再起作用。有没有其他方法可以做到这一点?该应用程序只需要显示在家中的SSID即可选择它,并将该数据发送到设备(IoT),它将尝试与他们的接入点连接。该代码适用于targetSdkVersion 28
final WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final List<ScanResult> results = new ArrayList<>();
wiFiScanResultsBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
for (ScanResult temp : wifiManager.getScanResults()){
if(!results.contains(temp)){
results.add(temp);
}
}
}
};
registerReceiver(wiFiScanResultsBroadcast,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager.startScan();
if(cdt1 != null) cdt1.cancel();
ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<>(context,android.R.layout.simple_list_item_1);
arrayAdapter2.add("Buscando Puntos de Acceso...");
spinner.setAdapter(arrayAdapter2);
cdt1 = new CountDownTimer(8000,8000) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
findViewById(R.id.reloadAPView).clearAnimation();
final Spinner spinner = (Spinner) findViewById(R.id.spinnerSSID);
final ArrayAdapter<String> arrayAdapter3 = new ArrayAdapter<>(context,android.R.layout.simple_list_item_1);
final int[] select = {0};
/*if(results != null && results.size() == 1 && results.get(0).SSID.isEmpty()){
results.clear();
}*/
if(results != null && results.size() > 0){
Collections.sort(results,new Comparator<ScanResult>() { // Se ordenan los resultados de mayor a menor intensidad de señal.
@Override
public int compare(ScanResult lhs,ScanResult rhs) {
if(lhs.level > rhs.level){
return -1;
}else if(lhs.level < rhs.level){
return 1;
}else{
return 0;
}
}
});
for(ScanResult ap : results){
if(!ap.SSID.toString().startsWith("SmartHeat_")
&& !ap.SSID.toString().startsWith("miCalorex_")
&& !ap.SSID.toString().isEmpty()){
Log.d("SSID",":"+ap.SSID);
if(ap.frequency > 3000){
arrayAdapter3.add(ap.SSID + " (5GHz)");
}else{
arrayAdapter3.add(ap.SSID);
}
}
}
}
if(arrayAdapter3.getCount() <= 0){
arrayAdapter3.clear();
arrayAdapter3.add("No se encontraron redes");
}
spinner.setAdapter(arrayAdapter3);
spinner.setSelection(0);
/*if(arrayAdapter2.getCount() > 0){
boolean selectedOk = false;
for(int i = 0; i < arrayAdapter2.getCount(); i++){
if(!arrayAdapter2.getItem(i).contains("5GHz")){
spinner.setSelection(i);
selectedOk = true;
break;
}
}
if(!selectedOk){
spinner.setSelection(0);
}
}*/
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView,View view,int i,long l) {
if(!adapterView.getItemAtPosition(i).toString().contains("Buscando Puntos de Acceso") &&
!adapterView.getItemAtPosition(i).toString().contains("No se encontraron redes")){
selectedAP[0] = adapterView.getItemAtPosition(i).toString();
verifiSsid(selectedAP);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
};
cdt1.start();
我用API 28得到此结果,相反,我在ScanResult temp中得到空响应:wifiManager.getScanResults() debug
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。