Parte de la funcionalidad de mi aplicación es escanear y mostrar una lista de puntos de acceso WiFi, y luego conectar con el elegido por el usuario. Tengo esta funcionalidad funcionando. Ahora, también deseo recibir una notificación cuando la conexión "se realice". Esto debería ser bastante simple, pero me encuentro tropezando.WIFI_STATE_CHANGED_ACTION intento no recibido al conectarse al punto de acceso WiFi?
He leído varias publicaciones aquí en SO, y todas mencionan registrarse en WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION
o WifiManager.WIFI_STATE_CHANGED_ACTION
. Sin embargo, ninguno de estos funciona para mí. ¿Alguien puede detectar cualquier error en este código? (Me voy a cabo las partes que hacen la exploración y esas cosas)
comportamiento esperado: Tan pronto como la conexión se realiza correctamente (es decir, cuando veo el icono de "conectado" en la barra de notificaciones), la Se debe recibir la transmisión y debería ver el brindis.
comportamiento observado: La emisión se recibe cuando se inicia la aplicación en primer lugar, y cada vez que volver a él (es decir, cada vez que onResume()
se llama, o sospecho, cada vez que me registro en el intento)
public class WifiScanActivity extends Activity {
WifiManager mainWifi;
WifiReceiver mWifiReceiver;
IntentFilter mIntentFilter;
private final static String TAG = "WifiScanActivity";
public static final String INTENT_FOR_WIFI_CONNECTED =
WifiManager.WIFI_STATE_CHANGED_ACTION;
// public static final String INTENT_FOR_WIFI_CONNECTED =
// WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiReceiver = new WifiReceiver();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mIntentFilter.addAction(INTENT_FOR_WIFI_CONNECTED);
registerReceiver(mWifiReceiver, mIntentFilter);
mainWifi.startScan();
}
protected void onPause() {
unregisterReceiver(mWifiReceiver);
super.onPause();
}
protected void onResume() {
registerReceiver(mWifiReceiver, mIntentFilter);
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
Log.d(TAG,
"In WifiReceiver: Broadcast Received = " + intent.getAction());
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent
.getAction())) {
// Display the ListView and connect to the selected AP
} else if (INTENT_FOR_WIFI_CONNECTED.equals(intent.getAction())) {
if (WifiManager.WIFI_STATE_ENABLED == intent.getIntExtra(
WifiManager.EXTRA_WIFI_STATE, 0)) {
displayNetworkInfo();
}
/*if(true == intent.getBooleanExtra(
* WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
* displayNetworkInfo();
}*/
}
}
}
private void displayNetworkInfo() {
WifiInfo wifiInfo = mainWifi.getConnectionInfo();
String ssid = wifiInfo.getSSID();
int ip = wifiInfo.getIpAddress();
String message = "Connection established.\nSSID = " + ssid
+ "; IP Address = " + Helper.displayIpAddress(ip);
Log.d(TAG, message);
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
Si elimino el comentario del código de WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION, no veo la transmisión en absoluto.
Nota: Yo sé que la conexión es exitosa porque veo el estado en pantalla de configuración de WiFi del androide.
El artículo se ha vinculado a muestra cómo para recibir difusión cuando los resultados de escaneo están disponibles. Mi aplicación ya lo está haciendo con éxito. Lo que necesito es recibir una transmisión tan pronto como la conexión WiFi a un punto de acceso sea exitosa. No vi nada relacionado con esto en el artículo. – curioustechizen