Pregunta

He creado un receptor de radiodifusión en la actividad principal y el servicio en segundo plano que está enviando los intentos de difusión. La aplicación se bloquea cada vez que trato de ejecutarlo y el registro muestra el siguiente mensaje de error:

  

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   com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8

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

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 de la siguiente reveiver de difusión se define:

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 incluye 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!

¿Fue útil?

Solución

¿Ha ido paso a paso en el depurador para encontrar exactamente donde se produce el accidente?

Una cosa a tener en cuenta es si está sustituyendo los eventos del ciclo de vida de Android que está llamando correctamente el constructor de la clase base cuando sea necesario.

Otros consejos

Lo resuelto mediante la adición de intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); cuando se inicia una nueva activity.

Si no se ha iniciado a partir de una activity, se necesita intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);.

Existen dos filtros Intent; sólo se necesita uno. Si registra el BroadcastReceiver través registerReceiver(), utilice únicamente el IntentFilter que es el segundo parámetro a la llamada a la API - también no poner un elemento <intent-filter> en el <activity> en el manifiesto

.

No sé a ciencia cierta si ese es su problema, pero ciertamente no ayuda.

No estoy seguro de que pueda comprender lo que quiero decir, por 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 se registra dos veces.

i creo que hay que usar el método de ciclo de vida y onPause() Método onResume() para anular el registro y registrar la intención de difusión.

He descubierto que asegurarse de que la intención se ha ejecutado desde la actividad original y poner las cosas en una clase se deshizo de toda la cuestión.

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

Lo que quería hacer, es llamar acabado () en la actividad de niño cuando se producen determinados eventos en la actividad de los padres es decir, enviando el mensaje de difusión de MainActivity a la actividad del niño.

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 función de la actividad niño onResume ():

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

En función de la actividad niño OnPause ():

    unregisterReceiver(m_quitReceiver);

Dentro de la clase de actividad del niño:

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.

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

    window.onNotification = function(event) {
    alert('onNotification called!');
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top