Reputation: 4810
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?
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:
The results.size() of List<ScanResult> results = wifiManager.getScanResults();
is always 0.
for known reason the handleWifiPermissions
called again and again.
Upvotes: 1
Views: 1260
Reputation: 319
Try to enable Location in Setting.
I faced the same problem on my Oreo(API27) device.
Upvotes: 1
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