2012-02-24 10 views
10

He intentado registrar Wifi BroadcastReceiver para obtener el estado wifi cuando cambia. Pero hasta ahora no he tenido suerte recibiendo la transmisión.BroadcastReceiver declarado en manifiesto no recibe la difusión

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".WifiReceiver" > 
     <intent-filter> 
      <action android:name="android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" /> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

    //activity declaration here... 

</application> 

¿Ustedes saben cómo registrar BraodcastReceiver en manifiesto?

no quiero registrarlo en actividades porque quiero monitorear el wifi cuando hay cambios en el estado de Wi-Fi si mi solicitud está funcionando o no.

Ésta es mi clase BroadcastReceiver:

public class WifiReceiver extends BroadcastReceiver { 
    private final String TAG = "WifiReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
     String wifiStateText = "No State"; 

     switch (wifiState) { 
     case WifiManager.WIFI_STATE_DISABLING: 
      wifiStateText = "WIFI_STATE_DISABLING"; 
      break; 
     case WifiManager.WIFI_STATE_DISABLED: 
      wifiStateText = "WIFI_STATE_DISABLED"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      wifiStateText = "WIFI_STATE_ENABLING"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      wifiStateText = "WIFI_STATE_ENABLED"; 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      wifiStateText = "WIFI_STATE_UNKNOWN"; 
      break; 
     default: 
      break; 
     } 
     MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText); 
     MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date()); 
    } 
} 

Realmente espero conseguir una cierta ayuda. Gracias por adelantado.

+0

mirada a este Blog http://marakana.com/forums/android/examples/40.html – Ajay

+0

¿Ha definido el permiso para Android .permission.ACCESS_WIFI_STATE y android.permission.CHANGE_WIFI_STATE – Ajay

+0

@Ajay, ya he consultado ese blog que mencionaste. El problema es que, como mencioné, quiero registrar el receptor en el manifiesto NO en las actividades. Ya puse el permiso en el manifiesto. De todos modos, gracias por su atención Ajay. – Zul

Respuesta

25

Su receptor en el manifiesto debería parecerse este

<receiver android:name=".WifiReceiver" > 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    </intent-filter> 
</receiver> 

También puede ser necesario el permiso siguiente

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Wow ... gracias @ dong221.Eso realmente lo hizo. Si no te importa que pregunte, ¿cómo sabías que el nombre de la acción debe ser 'android.net.wifi.WIFI_STATE_CHANGED'? ¿Me puede dar algún enlace sobre eso? – Zul

+1

@Zul Se enumera aquí como un valor constante: http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION –

0

El hecho de que la transmisión se haya enviado con la bandera Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT, es decir, su aplicación debe registrar este receptor antes del inicio de Android, que solo pueden ser los servicios del sistema.

0

creo que se haya registrado el receptor como el de esta manera:

<receiver 
    android:name=".WiFiReciever"> 
    <intent-filter> 
     <action 
      android:name="class name with package" /> 
     <data 
      android:scheme="myscheme" /> 
    </intent-filter> 
</receiver> 
+0

'', no te estoy siguiendo. ¿Algún ejemplo sobre eso? – Zul

3
<receiver android:name=".WifiReceiver" > 
    <intent-filter android:priority="100" > 
      <action 
      android:name="android.net.wifi.WIFI_STATE_CHANGED" 
      android:enabled="true" /> 
    </intent-filter> 
</receiver> 

Ingrese t él alta prioridad y bandera también habilitada como verdadera

+0

Vaya ... gracias @ user1203673. Eso realmente lo hizo. Si no te importa que pregunte, ¿cómo sabías que el nombre de la acción debe ser 'android.net.wifi.WIFI_STATE_CHANGED'? ¿Me puede dar algún enlace sobre eso? Lo siento, no puedo votar, mi reputación no es suficiente. – Zul

+0

atributo "habilitado" da error de sintaxis. – usman

+0

Pruebe esto: ' ' –

0

Lo mejor que funcionó para mí:

Manifiesto:

<receiver android:name="com.AEDesign.communication.WifiReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

WifiReceiver Clase:

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     if(info != null) { 
      if(info.isConnected()) { 
       //Do your work. 
       //To check the Network Name or other info: 
       WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
       String ssid = wifiInfo.getSSID();  
      } 
     } 
    } 
} 

permisos:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
-1

Esto es todo receptor de radiodifusión en relación con la conexión a internet

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />     
<action android:name="android.net.wifi.STATE_CHANGE" /> 
Cuestiones relacionadas