问题描述
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 (将#修改为@)