Question

J'ai créé un récepteur de radiodiffusion dans l'activité principale et le service d'arrière-plan qui envoie des intentions de diffusion. L'application se bloque chaque fois que je tente de l'exécuter et le journal affiche le message d'erreur suivant:

  

10-04 13: 30: 43,218:   ERREUR / AndroidRuntime (695):   java.lang.RuntimeException: Erreur   réception intention de diffusion {   Action = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE   (A extras)} dans   com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8

Le message de diffusion est envoyé de la classe CommunicationService dans la méthode suivante:

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

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

dans l'activité principale est définie la Reveiver de radiodiffusion suivant:

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();
        }
    }

et enregistrée dans la méthode onResume:

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

Et le fichier manifeste comprend les éléments suivants:

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

J'apprécierais vraiment si quelqu'un pourrait expliquer pourquoi le journal affiche le message ci-dessus et l'application se bloque.

Merci!

Était-ce utile?

La solution

Avez-vous allé étape par étape dans le débogueur pour trouver exactement où l'accident se produit?

Une chose à surveiller est si vous surchargez les événements du cycle de vie Android que vous appelez correctement le constructeur de la classe de base en cas de besoin.

Autres conseils

Je l'ai résolu en ajoutant intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); lorsque vous démarrez une nouvelle activity.

Si pas commencé à partir d'un activity, intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); est nécessaire.

Vous avez deux filtres Intent; vous avez seulement besoin d'un. Si vous enregistrez le BroadcastReceiver via registerReceiver(), utilisez uniquement le IntentFilter qui est le deuxième paramètre à cet appel API - ne mettez pas aussi un élément de <intent-filter> dans le <activity> dans le manifeste

.

Je ne sais pas avec certitude si tel est votre problème, mais il ne contribue certainement pas.

Je ne suis pas sûr que vous pouvez comprendre ce que je veux dire, à cause de mon anglais.

Je pense que cette ligne de code est cause d'un problème:

userInfo.setSessionString(sessionString); 

Mon projet a eu tort parce que je veux:

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

et vous enregistrez deux fois.

je pense que vous devez utiliser la méthode du cycle de vie onPause() et Méthode onResume() pour désenregistrer et enregistrer l'intention de diffuser.

Je trouve que le fait que l'intention a été exécuté à partir de l'activité originale et mettre les choses en une classe débarrassé de toute la question.

Ceci est une question très ancienne, mais je pense que beaucoup de gens seraient toujours des réponses à la recherche pour elle. Ma situation est tout à fait semblable à celui-ci.

Ce que je voulais faire, est d'appeler finish () dans l'activité de l'enfant lorsque certains événements se produisent dans l'activité parent-à-dire en envoyant le message de diffusion de MainActivity à l'activité des enfants.

Voici le code en MainActivity lorsque l'événement est survenu (par exemple lors de la connexion de réseau rompu etc etc):

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

Dans la fonction de l'activité de l'enfant onResume ():

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

Dans la fonction de l'activité de l'enfant OnPause ():

    unregisterReceiver(m_quitReceiver);

Dans la classe d'activité enfant:

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
        }
    }
};

Hope this helps.

Ok ce qui a fonctionné pour moi déclarais la méthode onNotification comme suit:

    window.onNotification = function(event) {
    alert('onNotification called!');
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top