ser - ver claves wifi guardadas android sin root
cómo obtener redes wifi disponibles y mostrarlas en una lista en Android (3)
Después de Android 6.0
Si su versión del sistema operativo Android es 6.0 o superior, entonces su aplicación debe solicitar el siguiente permiso en tiempo de ejecución (cualquiera de los siguientes).
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Cómo pedir el permiso en tiempo de ejecución
Solo agregue este código en el método onResume de su actividad
@Override
public void onResume()
{
super.onResume();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
if(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 87);
}
}
}
¿Qué pasará si no tienes el permiso anterior en Runtime?
Wifi.getScanResults () devolverá 0 resultados.
Muchas personas, incluyéndome a mí, han enfrentado este problema en los teléfonos Nexus 5 y lo han referido como un "error".
¿Cómo escanear y leer redes wifi? (Más profundo incomprensible)
El escaneo puede ser solicitado por
wifiManager.startScan();
boolean startScan () devuelve verdadero o falso de inmediato en función del hecho de si el escaneo ha comenzado correctamente o no.
Sin embargo, inicia un evento asíncrono que envía una intención ( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION ) cuando finaliza el análisis. Dado que los resultados del análisis (resultado de evento asíncrono) no estarán disponibles de inmediato, tendrá que registrar su actividad con un BroadcastReceiver.
Aquí está el fragmento de código de cómo leer el resultado en BroadcastReceiver si quiere leer esos resultados.
public class WifiScanReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
List<ScanResult> scanResults = wifimanager.getScanResults();
// Write your logic to show in the list
}
}
}
Puedes ver esta demostración en BroadcastReceiver
Enlaces relevantes
El resultado del escaneo devuelve una lista vacía en Android 6.0
amigos. Quiero encontrar todas las redes Wi-Fi disponibles y mostrarlas en una lista que he intentado a continuación ... Pero no funciona. He editado mi código y ahora recibí el resultado, pero con todo el resultado que no necesito. solo necesito el nombre de la red wifi en mi lista.
package com.example.wifilistdemo;
import java.util.List;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView mainText;
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainText = (TextView) findViewById(R.id.tv1);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (mainWifi.isWifiEnabled() == false)
{
// If wifi disabled then enable it
Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled",
Toast.LENGTH_LONG).show();
mainWifi.setWifiEnabled(true);
}
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
mainText.setText("Starting Scan...");
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
mainWifi.startScan();
mainText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);
}
protected void onPause() {
unregisterReceiver(receiverWifi);
super.onPause();
}
protected void onResume() {
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
// Broadcast receiver class called its receive method
// when number of wifi connections changed
class WifiReceiver extends BroadcastReceiver {
// This method call when number of wifi connections changed
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
sb.append("/n Number Of Wifi connections :"+wifiList.size()+"/n/n");
for(int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ". ");
sb.append((wifiList.get(i)).toString());
sb.append("/n/n");
}
mainText.setText(sb);
}
}
}
Necesita crear un BroadcastReceiver
para escuchar los resultados del escaneo Wifi:
private final BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
List<ScanResult> mScanResults = mWifiManager.getScanResults();
// add your logic here
}
}
}
En onCreate()
asignaría mWifiManager
e iniciaría un escaneo:
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
registerReceiver(mWifiScanReceiver,
new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mWifiManager.startScan();
getScanResults()
devolverá datos solo si tiene los permisos adecuados. Para esto, agregue una de las dos líneas siguientes a su AndroidManifest.xml
:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
También tenga en cuenta que en la API 23+, los permisos deben solicitarse en tiempo de ejecución. (Para un entorno de laboratorio, también puede otorgar permisos manualmente en Configuración, se requiere menos codificación, pero no se recomienda para una aplicación de usuario final).
Tenga en cuenta que el código que maneja los resultados de su exploración se ejecutará cada vez que haya un nuevo resultado de escaneo disponible, actualizando el resultado.
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
for (int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ".");
sb.append((wifiList.get(i)).SSID);
sb.append("/n");
}
mainText.setText(sb);