La aplicación nunca recibe RSSI_CHANGED_ACTION

Soy nuevo en la programación de Android y estoy tratando de entender el concepto de BroadcastReceivers. Para ayudarme a mí mismo, sólo estoy tratando de escribir una pequeña aplicación que supervisa la intensidad de la señal Wifi.

Ahora, de mi entendimiento puedo simplemente esperar para recibir la RSSI_CHANGED_ACTION difundida por el sistema. El RSSI debe cambiar frecuentemente lo que significa que debería recibir esta notificación con frecuencia … sin embargo, nunca lo recibo una vez. He regado mi código hasta el mínimo necesario por lo que sólo registra un mensaje cuando se recibe la notificación.

public class RssiActivity extends Activity { public BroadcastReceiver rssiReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.d("Rssi", "RSSI changed"); } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onResume() { super.onResume(); registerReceiver(rssiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION)); Log.d("Rssi", "Registered"); } @Override public void onPause() { super.onPause(); unregisterReceiver(rssiReceiver); Log.d("Rssi", "Unregistered"); } } 

Ya he visto este post Android: ¿Cómo supervisar la fuerza de la señal WiFi y no parece que me ayude. También he probado el ejemplo de código aquí http://android-er.blogspot.com/2011/01/check-rssi-by-monitoring-of.html y nunca actualizó el valor RSSI tampoco. Estoy bastante confundido en cuanto a por qué esto es. Cualquier ayuda que pueda darme sería muy apreciada. ¡Gracias!

3 Solutions collect form web for “La aplicación nunca recibe RSSI_CHANGED_ACTION”

Por lo tanto, tuve el mismo problema que usted hizo, deseando un valor RSSI actualizado como el usuario caminó alrededor, etc, y no pude resolverlo usando RSSI_CHANGED_ACTION.

Al igual que el problema que está teniendo, mi devolución de llamada no se llamará correctamente. Curiosamente, sólo se llamaba una vez, cuando se creaba la actividad, y luego nunca más.

Mi solución

En su onCreate (), registre una devolución de llamada para SCAN_RESULTS_AVAILABLE_ACTION. A continuación, llame a WifiManager.startScan ().

Ahora, en su devolución de llamada, haga:

 WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); int newRssi = wifiMan.getConnectionInfo().getRssi(); wifiMan.startScan(); 

Ahora tiene un bucle, donde la devolución de llamada inicia una exploración, recibe los resultados e inicia otra exploración.

Es asqueroso y chupar mucho poder, sin embargo, puede ver los valores de RSSI cambiar a medida que camina.

Código Completo

(Tenga en cuenta que utilizo onResume y onPause para registrar y anular el registro, por lo que sólo se escaneará repetidamente, por ejemplo, la batería de desecho, cuando la actividad está en pantalla)

 @Override public void onResume() { super.onResume(); //Note: Not using RSSI_CHANGED_ACTION because it never calls me back. IntentFilter rssiFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); this.registerReceiver(myRssiChangeReceiver, rssiFilter); WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); } @Override public void onPause() { super.onPause(); this.unregisterReceiver(myRssiChangeReceiver); } /** * Broadcast receiver to update */ private BroadcastReceiver myRssiChangeReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); int newRssi = wifiMan.getConnectionInfo().getRssi(); Toast.makeText(getActivity(), ""+newRssi, Toast.LENGTH_SHORT).show(); }}; 

Lo siento, estoy tan tarde, sólo tuve que averiguar que tenía que resolver su problema: P

¿Está usted seguro de que tiene que activar (es decir, ¿está seguro de que la intensidad de la señal está cambiando)? ¿Has leído la Dokumentation de BroadcastReciever ?

Nota: Si registra un receptor en su implementación Activity.onResume (), debe anular su registro en Activity.onPause (). (No recibirá intenciones cuando se detiene, y esto reducirá la sobrecarga innecesaria del sistema). No anule el registro en Activity.onSaveInstanceState (), porque no se llamará si el usuario se mueve de nuevo en la pila de historial.

Trate de registrar su receptor dentro de su AndroidManifest.

WifiManager.RSSI_CHANGED_ACTION se activa cuando cambian los niveles de RSSI. IE usted pierde o gana una barra del wifi. No sucede que a menudo. Mi conjetura es él es pegajoso así que dispara cuando está registrado.

Como se dijo, la mejor manera que encontré para resolver el problema es a través de WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.

  • Iniciar Androids WiFi-Manager mediante el envío de una intención?
  • Establecer la configuración de IP de Android, DNS, GATEWAY mediante programación
  • Android cómo saber el uso total de datos de Internet por día a través de wifi y móvil
  • UDP Multicasting desde el móvil a la PC
  • ¿Cómo resolver el problema "ingrese la contraseña para el almacenamiento de credenciales"?
  • Wi-Fi Directo y "normal" Wi-Fi - ¿Diferentes MAC?
  • Cómo obtener la dirección MAC de Android Wi-Fi Hotspot / tethering / AP
  • ¿Qué es diferente de NSD y WifiP2pManager?
  • Cómo crear y leer configuraciones WEP / EAP WiFi de forma programática en Android?
  • Cómo obtener el IP del hotspot wifi en Android?
  • ¿Es posible eliminar los grupos Wifi Direct de Android programados?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.