wifiManager.getScanResult () возвращает нулевое значение - PullRequest
0 голосов
/ 30 мая 2019

Я ищу для сканирования доступных сетей Wi-Fi, но метод getScanResults () возвращает нулевой список.

Я включил все необходимые разрешения:

android.permission.ACCESS_COARSE_LOCATION
android.permission.CHANGE_WIFI_STATE
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_WIFI_STATE

Основной класс деятельности:

public class Home extends Activity {`

    Context context;
    WifiManager wifiManager = null;
    WiFiReceiver wifiReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        context = this;
        wifiManager = (WifiManager) 
        context.getSystemService(Context.WIFI_SERVICE);
        wifiReceiver = new WiFiReceiver(wifiManager);

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(wifiReceiver, intentFilter);

        wifiManager.startScan();
        List<ScanResult> results = wifiReceiver.results;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        unregisterReceiver(wifiReceiver);
    }
}

Приемник вещания:

public class WiFiReceiver extends BroadcastReceiver {`

    public List<ScanResult> results;
    private WifiManager wifiManager;

    public WiFiReceiver(WifiManager wifiManager) {
        this.wifiManager = wifiManager;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        boolean success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false);
        if (success) {
            results = wifiManager.getScanResults();
            Log.e("wiFi Manager", "Done");

        } else {
            Log.e("wiFi Manager", "Scan failure");
        }
    }
}

1 Ответ

0 голосов
/ 30 мая 2019

Проблема в том, что вы предполагаете, что startScan() выдаст результат немедленно, но на самом деле он только делает то, что говорит, начиная сканирование.Вы получаете доступ к переменной results до того, как onReceive в вашем WiFiReceiver сработало, поэтому она всегда будет нулевой (ваша регистрация должна подтвердить это).

Вам нужно использоватьобратный вызов для получения результатов, когда они будут готовы, как код здесь делает.Обратите внимание, как метод onReceive вызывает scanSuccess(), а результаты доступны только в scanSuccess(), а не сразу после вызова startScan().Также обратите внимание, как они проверяют, действительно ли запуск сканирования был успешным, проверяя логическое значение startScan() возвращает

...