user3668129
user3668129

Reputation: 4810

Why I'm getting 0 ScanResult from WifiManager?

I'm trying to do a simple thing without any success. I want to get WiFi scan results.

I read and try those links without any good results:

How can I get Android Wifi Scan Results into a list?

WifiManager

Here is my code:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initWifiSpinner();
    initWifi();
}


@Override
public void onResume() {
    super.onResume();
    getWifiPermissions();
}

@Override
protected void onPostResume() {
    super.onPostResume();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case LOCAL_RC_WIFI_PERMISIONS:
            handleWifiPermissions();
            break;
    }
}

/***************************************************************************************
 *
 *  WIFI Handler
 *
 ****************************************************************************************/

private void initWifi() {
    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    wifiScanReceiver = new WifiScanReceiver();
    enableWifi();
    getWifiPermissions();
}

private void enableWifi() {
    if (false == wifiManager.isWifiEnabled()) {
        Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled",  Toast.LENGTH_LONG).show();
        wifiManager.setWifiEnabled(true);
    }
}

private void initWifiSpinner() {
    Spinner wifiSpinner = (Spinner) findViewById(R.id.spinnerWifi);
    wifiSpinner.setOnItemSelectedListener(new WifiSpinnerActivity());
    wifiSpinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerListArray);
    wifiSpinner.setAdapter(wifiSpinnerAdapter);
}

private void getWifiPermissions() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, LOCAL_RC_WIFI_PERMISIONS );
    } else {
        handleWifiPermissions();
    }
}

private void handleWifiPermissions() {
    registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    boolean startScan = wifiManager.startScan();
    if (startScan) {
        List<ScanResult> results = wifiManager.getScanResults();
        Toast.makeText(getApplicationContext(), "SSID list size: " + results.size(), Toast.LENGTH_SHORT).show();
    }
}

public class WifiScanReceiver extends BroadcastReceiver {
    int local = 0;

    @Override
    public void onReceive(Context context, Intent intent) {
        List<ScanResult> results = wifiManager.getScanResults();
        int size = results.size();
        Toast.makeText(getApplicationContext(), ++local + " Result list size: " + size, Toast.LENGTH_SHORT).show();
        unregisterReceiver(this);
    }
}

I have the following permissions:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

I have 2 problems:

  1. The results.size() of List<ScanResult> results = wifiManager.getScanResults(); is always 0.

  2. for known reason the handleWifiPermissions called again and again.

Upvotes: 1

Views: 1260

Answers (2)

user3752013
user3752013

Reputation: 319

Try to enable Location in Setting.

I faced the same problem on my Oreo(API27) device.

Upvotes: 1

manhtuan21
manhtuan21

Reputation: 3430

Try this,it works for me :

registerReceiver(new BroadcastReceiver() {
                        @Override
                        public void onReceive(Context context, Intent intent) {
                            List<ScanResult> results = wifiManager.getScanResults();
                            Toast.makeText(MainActivity.this, "" +results.size(), Toast.LENGTH_SHORT).show();
                        }
                    }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
                    wifiManager.startScan();

Upvotes: 0

Related Questions