Согласно официальной документации Android, метод startScan в WifiManager устарел на уровне API P. Однако я пытаюсь использовать этот метод на уровне API 26 (до P) безуспешно.Я разработал приложение, которое требует сканирования сетей WiFi, если пользователь согласен с необходимыми разрешениями, и это поведение имеет первостепенное значение для надлежащего функционирования приложения.Однако я не получаю никакого ответа при вызове метода startScan.¿Может кто-нибудь помочь мне решить эту проблему или найти альтернативное решение?
Это ссылка на документацию.https://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()
Приветствия
РЕДАКТИРОВАТЬ :
Это код для запуска процесса сканирования:
public boolean startScan() {
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wm.isWifiEnabled()) {
try {
wm.setWifiEnabled(true);
} catch (SecurityException e) {
Log.w(LOG_TAG, "Error enabling wifi", e);
return false;
}
}
boolean started = wm.startScan();
Log.d(LOG_TAG, "Scan started? " + started);
return started;
}
Иэто BroadcastReceiver, который получает результат сканирования.Он работает за исключением Android 8 с targetSdkVersion 26 +
public class InOutWifiScanResultsReceiver extends BroadcastReceiver {
private static final String LOG_TAG = "ScanResults";
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent); // Never called in Android 8 and targetSdkVersion 26+
List<ScanResult> results = getWifiResults(context);
Log.d(LOG_TAG, "Received results (" + results.size() + " AP's)");
}
private static List<ScanResult> getWifiResults(Context context) {
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
try {
return wm.getScanResults();
} catch (SecurityException e) {
return new ArrayList<>();
}
}
}
. В Манифесте мы используем разрешения perintint, а BroadcastReceiver объявил:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<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"/>
<receiver
android:name=".InOutWifiScanResultsReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.net.wifi.SCAN_RESULTS"/>
</intent-filter>
</receiver>
Разрешение на местоположение требуется во время выполнения, поэтому яЯ уверен, что это разрешено.Я также уверен, что местоположение активно (уровень GPS).
BroadcastReceiver работает нормально, потому что компиляция с targetSdkVersion = 25 или менее каждый работает, как ожидалось, и сканирование получено.Я также тестировал с android: exported = "true", но это не влияет на результаты.
Буду благодарен с вашей помощью.