2009-10-04 12 views
14

Creé un receptor de difusión en la actividad principal y el servicio en segundo plano que está enviando intenciones de transmisión. La aplicación se bloquea cada vez que intento ejecutarlo y el registro muestra el siguiente mensaje de error:Error al recibir la intención de difusión Problema

10-04 13: 30: 43.218: ERROR/Android Runtime (695): java.lang.RuntimeException: Error recibir Intención de emisión { action = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (tiene extras)} en [email protected]

El mensaje de difusión se envía desde Clase CommunicationService en el siguiente método:

private void announceLoginStatus(){ 
    Intent intent = new Intent(LOGIN_STATUS_UPDATE); 
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage); 
    intent.putExtra(SESSION_STRING, mSessionString); 
    sendBroadcast(intent); 
} 

donde

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" 

en la actividad principal se define de la siguiente reveiver emisión:

public class LoginStatusReceiver extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 
      String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE); 
      String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING); 

      userInfo.setSessionString(sessionString); 
      saveSettings(); 
     } 
    } 

y registrado en el método onResume:

 IntentFilter loginStatusFilter; 
     loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE); 
     loginStatusReceiver = new LoginStatusReceiver(); 
     registerReceiver(loginStatusReceiver, loginStatusFilter); 

Y el archivo de manifiesto yo ncludes lo siguiente:

<activity android:name=".GaitLink" 
       android:label="@string/app_name"> 
     <intent-filter> 
      ... 
      <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" /> 
     </intent-filter> 
    </activity> 

Realmente agradecería si alguien podría explicar por qué el registro muestra el mensaje anterior y la aplicación se bloquea.

Gracias!

Respuesta

5

¿Ha ido paso a paso en el depurador para encontrar exactamente dónde se produce el bloqueo?

Una cosa a tener en cuenta es si está anulando cualquier evento de ciclo de vida de Android que está llamando correctamente al constructor de la clase base cuando sea necesario.

+58

¿Tal vez podría decirnos cuál era el problema? – Buffalo

4

Tiene dos filtros Intent; solo necesitas uno Si registra el BroadcastReceiver a través de registerReceiver(), solo use el IntentFilter que es el segundo parámetro de esa llamada a la API; no coloque también un elemento <intent-filter> en el <activity> en el manifiesto.

No sé con certeza si ese es su problema, pero ciertamente no ayuda.

7

Lo resolví agregando intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); cuando comienza una nueva actividad.

Si no se inició desde una actividad, es necesario intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK".

+0

¡funciona para mí! –

0

Creo que tiene que utilizar el método del ciclo de vida onPause() y onResume() Método para anular el registro y registrar la intención de transmisión.

0

No estoy seguro de que pueda entender lo que quiero decir, debido a mi inglés.

creo que esta línea de código es causa de un problema:

userInfo.setSessionString(sessionString); 

Mi proyecto era incorrecto porque quiero:

int i = Integer.parseint(intent.getExtars("9")); 

y registrar dos veces.

0

Descubrí que al intentar ejecutar la intención de la actividad original y al poner las cosas en una sola clase, me deshice de todo el problema.

-1

Ok lo que funcionó para mí estaba declarando el método onNotification de la siguiente manera:

window.onNotification = function(event) { 
    alert('onNotification called!'); 
}; 
0

Esta es una pregunta muy antigua, pero creo que muchas personas todavía estarían buscando respuestas para ella. Mi situación es bastante similar a esta.

Lo que quería hacer, es llamar a finish() en la actividad secundaria cuando ocurren ciertos eventos en la actividad principal, es decir, al enviar el mensaje de difusión de MainActivity a Child Activity.

siguiente es el código en MainActivity cuando se ha producido el evento (por ejemplo, cuando la conexión de red se rompe etc, etc):

Intent intent = new Intent("ACTIVITY_FINISH"); 
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken."); 
    sendBroadcast(intent); 

En onResume de la actividad niño() Función:

IntentFilter quitFilter = new IntentFilter(); 
    quitFilter.addAction("ACTIVITY_FINISH"); 
    registerReceiver(m_quitReceiver, quitFilter); 

En la función OnPause() de la actividad infantil:

unregisterReceiver(m_quitReceiver); 

Dentro de la actividad infantil cl Culo:

BroadcastReceiver m_quitReceiver = new BroadcastReceiver() 
{ 
    public void onReceive(Context context, final Intent intent) 
    { 
     if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH")) 
     { 
      Log.d("INFO", intent.getExtras().getString("FinishMsg")); 
      finish(); // do here whatever you want 
     } 
    } 
}; 

Espero que esto ayude.

Cuestiones relacionadas