Nesta publicação vamos mostrar como realizar uma busca de redes Wi-Fi (wirelles) e um exemplo simples de como se conectar.
Permissões Necessárias:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Abaixo criei uma classe para gerenciar o adaptador Wi-Fi, nela vamos ter um Listener que vai notificar nossa tela quando a busca foi terminada, e um método statico para iniciar a consulta.
/** * @author Guilherme Biff Zarelli (https://helpdev.com.br) */ public class WiFi extends BroadcastReceiver { /** * Listener responsável para notificar a consulta * */ public static interface WiFiListener { public void onResultScan(Context arg0, Intent arg1, Listresults); } public static WiFi startScanWIFI(Context context, WiFiListener wiFiListener) { WiFi wifi = new WiFi(); wifi.wiFiListener = wiFiListener; //Registra o broadcast para scaniar as redes wi-fi context.registerReceiver(wifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); wifi.wifiManager = wifi.getWifiManager(context); //Se o wi-fi estiver desabilitado, envia um comando para habilitar e retorna null para tratar. if (wifi.wifiManager.isWifiEnabled() == false) { Toast.makeText(context, "Habilitando Wi-Fi...", Toast.LENGTH_LONG).show(); wifi.wifiManager.setWifiEnabled(true); return null; } //Inicia o rastramento wifi.wifiManager.startScan(); return wifi; } private WifiManager wifiManager; private WiFiListener wiFiListener; private WiFi() { } /** * Pega o adaptador Wirelles * * @param context * @return */ public WifiManager getWifiManager(Context context) { if (wifiManager == null) { wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); } return wifiManager; } /** * Método responsavel em receber o broadcast do scan wi-fi * */ @Override public void onReceive(Context arg0, Intent arg1) { List results = wifiManager.getScanResults(); // Se tiver listener, envia os dados. if (wiFiListener != null) { wiFiListener.onResultScan(arg0, arg1, results); } //Cancela o Broadcast e desregistra. clearAbortBroadcast(); arg0.unregisterReceiver(this); } }
Agora que nosso gerenciador já está feito, vamos criar uma MainActivity e realizar a busca também criei um OnItemClickListener no ListView para simular uma conexão de rede Wi-Fi para testes.
/** * * @author Guilherme Biff Zarelli (https://helpdev.com.br) */ public class MainActivity extends Activity implements OnClickListener, WiFi.WiFiListener, AdapterView.OnItemClickListener { private WiFi wiFi; private ListView list; private ArrayAdapteradapter; private ArrayList itens; private List scans; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.botao).setOnClickListener(this); list = (ListView) findViewById(R.id.list); itens = new ArrayList (); adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, itens); list.setAdapter(adapter); list.setOnItemClickListener(this); } /** * Ação do botão * */ public void onClick(View view) { Toast.makeText(this, "Buscando....", Toast.LENGTH_LONG).show(); //Inicia a Busca... wiFi = WiFi.startScanWIFI(this, this); } /** * Exemplo de conexão Wi-Fi * * Ao clicar em um item crio um WifiConfiguration com os dados do item e * realizo a conexão Wi-Fi. * */ public void onItemClick(AdapterView> arg0, View arg1, int arg2, long arg3) { //Configuro uma rede baseada nos dados encontrados. WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.BSSID = scans.get(arg2).BSSID; wifiConfiguration.SSID = "\"" + scans.get(arg2).SSID + "\""; wifiConfiguration.preSharedKey = "\"15975346\""; //Conecto na nova rede criada. WifiManager wifiManager = wiFi.getWifiManager(this); int netId = wifiManager.addNetwork(wifiConfiguration); wifiManager.saveConfiguration(); wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); } /** * Retorno da busca... * */ public void onResultScan(Context arg0, Intent arg1, List results) { scans = results; itens.clear(); for (ScanResult scanResult : results) { itens.add(scanResult.SSID + " - " + scanResult.BSSID); } adapter.notifyDataSetChanged(); } }
Projeto em anexo: (DropBox)
Android – Como buscar redes Wi-fi e se conectar programaticamente (Wi-Fi Scan)