I tried to learn how to develop an Apps for scanning Access Points. I read many references and watched many videos. Among them are the following: Android 6.0 bug ? Have permission but getScanResults() still return empty list in Android 6.0
The method checkSelfPermission(Context, String) is undefined for the type ContextCompat
Wifi scan results broadcast receiver not working
https://www.youtube.com/watch?v=MrrBlxq33ms&t=181s
Please try my code and see if it runs on your device and if it give the list of Access Points. If not please advice. Thanks in advance
public class MainActivity extends AppCompatActivity {
Switch aSwitch;
WifiManager wifiManager;
TextView textView;
//Context mContext;
private static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mContext = (Manifest.permission) this;
setContentView(R.layout.activity_main);
aSwitch = (Switch) findViewById(R.id.myswitch);
textView = (TextView) findViewById(R.id.textView);
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
//reg switch
if (Build.VERSION.SDK_INT >= 23) {
checkPermission();
}
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//to switch on
if (isChecked && !wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
} else if (!isChecked && wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
}
}
});
//WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//textView.setText("\n\n Wifi status: " + wifiInfo.toString());
}
private boolean checkPermission() {
List<String> permissionsList = new ArrayList<String>();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(Manifest.permission.ACCESS_WIFI_STATE);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(Manifest.permission.CHANGE_WIFI_STATE);
}
if (permissionsList.size() > 0) {
ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
if (permissions.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED ||
(permissions.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED)){
onContinue();
}
else {
// Permission Denied
//Usually it works and I am thinking to add a toast later on
}
break;
}
}
//@Override
void onContinue() {
MyBroadCastReceiver myBroadCastReceiver = new MyBroadCastReceiver();
// register WiFi scan results receiver
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(myBroadCastReceiver, filter);
wifiManager.startScan();
super.onResume();
}
class MyBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
StringBuffer stringBuffer = new StringBuffer();
List<ScanResult> scanResults = wifiManager.getScanResults();
if (scanResults != null && !scanResults.isEmpty()) {
for (ScanResult scanResult : scanResults) {
stringBuffer.append(scanResult);
}
textView.setText(stringBuffer);
}
}
}
}