Wi-Fi Connections
Connect with WEP encryption
Section titled “Connect with WEP encryption”This example connects to a Wi-Fi access point with WEP encryption, given an SSID and the password.
public boolean ConnectToNetworkWEP(String networkSSID, String password){ try { WifiConfiguration conf = new WifiConfiguration(); conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain SSID in quotes conf.wepKeys[0] = "\"" + password + "\""; //Try it with quotes first
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); conf.allowedGroupCiphers.set(WifiConfiguration.AuthAlgorithm.OPEN); conf.allowedGroupCiphers.set(WifiConfiguration.AuthAlgorithm.SHARED);
WifiManager wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE); int networkId = wifiManager.addNetwork(conf);
if (networkId == -1){ //Try it again with no quotes in case of hex password conf.wepKeys[0] = password; networkId = wifiManager.addNetwork(conf); }
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); for( WifiConfiguration i : list ) { if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { wifiManager.disconnect(); wifiManager.enableNetwork(i.networkId, true); wifiManager.reconnect(); break; } }
//WiFi Connection success, return true return true; } catch (Exception ex) { System.out.println(Arrays.toString(ex.getStackTrace())); return false; }}Connect with WPA2 encryption
Section titled “Connect with WPA2 encryption”This example connects to a Wi-Fi access point with WPA2 encryption.
public boolean ConnectToNetworkWPA(String networkSSID, String password) { try { WifiConfiguration conf = new WifiConfiguration(); conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain SSID in quotes
conf.preSharedKey = "\"" + password + "\"";
conf.status = WifiConfiguration.Status.ENABLED; conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
Log.d("connecting", conf.SSID + " " + conf.preSharedKey);
WifiManager wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiManager.addNetwork(conf);
Log.d("after connecting", conf.SSID + " " + conf.preSharedKey);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); for( WifiConfiguration i : list ) { if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { wifiManager.disconnect(); wifiManager.enableNetwork(i.networkId, true); wifiManager.reconnect(); Log.d("re connecting", i.SSID + " " + conf.preSharedKey);
break; } }
//WiFi Connection success, return true return true; } catch (Exception ex) { System.out.println(Arrays.toString(ex.getStackTrace())); return false; }}Scan for access points
Section titled “Scan for access points”This example scans for available access points and ad hoc networks. btnScan activates a scan initiated by the WifiManager.startScan() method. After the scan, WifiManager calls the SCAN_RESULTS_AVAILABLE_ACTION intent and the WifiScanReceiver class processes the scan result. The results are displayed in a TextView.
public class MainActivity extends AppCompatActivity {
private final static String TAG = "MainActivity";
TextView txtWifiInfo; WifiManager wifi; WifiScanReceiver wifiReceiver;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE); wifiReceiver = new WifiScanReceiver();
txtWifiInfo = (TextView)findViewById(R.id.txtWifiInfo); Button btnScan = (Button)findViewById(R.id.btnScan); btnScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "Start scan..."); wifi.startScan(); } }); }
protected void onPause() { unregisterReceiver(wifiReceiver); super.onPause(); }
protected void onResume() { registerReceiver( wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) ); super.onResume(); }
private class WifiScanReceiver extends BroadcastReceiver { public void onReceive(Context c, Intent intent) { List<ScanResult> wifiScanList = wifi.getScanResults(); txtWifiInfo.setText(""); for(int i = 0; i < wifiScanList.size(); i++){ String info = ((wifiScanList.get(i)).toString()); txtWifiInfo.append(info+"\n\n"); } } }}Permissions
The following permissions need to be defined in AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />android.permission.ACCESS_WIFI_STATE is necessary for calling WifiManager.getScanResults(). Without android.permission.CHANGE_WIFI_STATE you cannot initiate a scan with WifiManager.startScan().
When compiling the project for api level 23 or greater (Android 6.0 and up), either android.permission.ACCESS_FINE_LOCATION or android.permission.ACCESS_COARSE_LOCATION must be inserted. Furthermore that permission needs to be requested, e.g. in the onCreate method of your main activity:
@Overrideprotected void onCreate(Bundle savedInstanceState) { ... String[] PERMS_INITIAL={ Manifest.permission.ACCESS_FINE_LOCATION, }; ActivityCompat.requestPermissions(this, PERMS_INITIAL, 127);}