pravin maske
pravin maske

Reputation: 72

Scanned wifi results are not showing

I have used the following link Application to Display All Available WiFi Network and Connect with Specific Network. to create application. But it is not showing any results in android 6.0 on and showing the scanned wifi networks in android 5.0 please help me for this solution. I am not good at network related concepts.

Following is the code for the scanning the wifi list and showing it in activity in list view format

public class ScanWifList extends ListActivity {
WifiManager mainWifiObj;
WifiScanReceiver wifiReciever;
ListView list;
String wifis[];
private int ASK_MULTIPLE_PERMISSION_REQUEST_CODE = 1;
EditText pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan_wifi);
    if (android.os.Build.VERSION.SDK_INT >= 23) {
        requestPermissions(new String[]{
                        Manifest.permission.INTERNET,
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.ACCESS_NETWORK_STATE},
                ASK_MULTIPLE_PERMISSION_REQUEST_CODE);
    }
    list=getListView();
    mainWifiObj = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifiReciever = new WifiScanReceiver();
    mainWifiObj.startScan();
    // listening to single list item on click
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // selected item
            String ssid = ((TextView) view).getText().toString();
            connectToWifi(ssid);
            Toast.makeText(ScanWifList.this,"Wifi SSID : "+ssid,Toast.LENGTH_SHORT).show();
        }
    });
}
protected void onPause() {
    unregisterReceiver(wifiReciever);
    super.onPause();
}
protected void onResume() {
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    super.onResume();
}
class WifiScanReceiver extends BroadcastReceiver {
    @SuppressLint("UseValueOf")
    public void onReceive(Context c, Intent intent) {
        List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
        wifis = new String[wifiScanList.size()];
        for(int i = 0; i < wifiScanList.size(); i++){
            wifis[i] = ((wifiScanList.get(i)).toString());
        }
        String filtered[] = new String[wifiScanList.size()];
        int counter = 0;
        for (String eachWifi : wifis) {
            String[] temp = eachWifi.split(",");
            filtered[counter] = temp[0].substring(5).trim();//+"\n" + temp[2].substring(12).trim()+"\n" +temp[3].substring(6).trim();//0->SSID, 2->Key Management 3-> Strength
            counter++;
        }
        list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),R.layout.list_item,R.id.label, filtered));
    }
}
private void finallyConnect(String networkPass, String networkSSID) {
    WifiConfiguration wifiConfig = new WifiConfiguration();
    wifiConfig.SSID = String.format("\"%s\"", networkSSID);
    wifiConfig.preSharedKey = String.format("\"%s\"", networkPass);
    // remember id
    int netId = mainWifiObj.addNetwork(wifiConfig);
    mainWifiObj.disconnect();
    mainWifiObj.enableNetwork(netId, true);
    mainWifiObj.reconnect();
    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"\"" + networkSSID + "\"\"";
    conf.preSharedKey = "\"" + networkPass + "\"";
    mainWifiObj.addNetwork(conf);
}
private void connectToWifi(final String wifiSSID) {
    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.connect);
    dialog.setTitle("Connect to Network");
    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID1);
    Button dialogButton = (Button) dialog.findViewById(R.id.okButton);
    pass = (EditText) dialog.findViewById(R.id.textPassword);
    textSSID.setText(wifiSSID);
    // if button is clicked, connect to the network;
    dialogButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String checkPassword = pass.getText().toString();
            finallyConnect(checkPassword, wifiSSID);
            dialog.dismiss();
        }
    });
    dialog.show();
}
}

If possible share anything which will hep me to show scanned wifi networks in android 6.0 and above

Upvotes: 0

Views: 66

Answers (1)

xiaomi
xiaomi

Reputation: 6703

Since Android 6.0 (sdk level 23), the WifiManager's function getScanResults() requires location permission.

An app must hold ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission in order to get valid results.

First add into your manifest:

<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>

Then modify your requestPermissions to add Manifest.permission.ACCESS_COARSE_LOCATION

Upvotes: 1

Related Questions