Erreur lors de la réception d'un problème d'intention de diffusion
J'ai créé un récepteur de radiodiffusion dans l'activité principale et le service d'arrière-plan qui est de diffuser des idées. L'application se bloque à chaque fois que j'essaie de le lancer et le Journal affiche le message d'erreur suivant:
10-04 13:30:43.218:
ERREUR/AndroidRuntime(695):
java.lang.RuntimeException: Erreur
récepteur de radiodiffusion Intention {
action=com.client.gaitlink.CommunicationService.d'action.LOGIN_STATUS_UPDATE
(extras) } dans
com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8
La diffusion de message est envoyé à partir de CommunicationService classe 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);
}
où
String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE"
l'activité principale de la diffusion reveiver est défini:
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é dans onResume méthode:
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>
Je serais vraiment reconnaissant si quelqu'un pouvait expliquer pourquoi le Journal affiche le message ci-dessus et l'application se bloque.
Merci!
source d'informationauteur Niko Gamulin
Vous devez vous connecter pour publier un commentaire.
Avez-vous allé étape par étape dans le débogueur pour trouver exactement où l'incident se produit?
Une chose à regarder dehors pour est si vous écrasez tout Android événements de cycle de vie que vous êtes bien l'appel de la classe de base du constructeur lorsque nécessaire.
Je l'ai résolu en ajoutant
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
lorsque vous démarrez une nouvelleactivity
.Si pas commencé à partir d'un
activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
est nécessaire.Vous avez deux
Intent
filtres; vous avez seulement besoin d'une. Si vous vous inscrivez leBroadcastReceiver
viaregisterReceiver()
utilisez uniquement leIntentFilter
qui est le deuxième paramètre pour que les appels de l'API -- ne pas aussi mettre un<intent-filter>
élément dans le<activity>
dans le manifeste.Je ne sais pas si c'est votre problème, mais il n'est certainement pas aider.
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:
Mon projet était faux, parce que je veux:
et vous vous inscrivez à deux reprises.
je pense que vous devez utiliser le cycle de vie de la méthode
onPause()
etonResume()
Méthode pour annuler l'enregistrement et enregistrer la diffusion de l'intention.J'ai trouvé que de s'assurer que l'intention a été exécuté à partir de l'activité d'origine et de mettre les choses dans une classe à se débarrasser de la totalité de l'émission.
C'est une très vieille question, mais je pense que beaucoup de gens seraient encore à la recherche de réponses. Ma situation est assez similaire à celui-ci.
Ce que je voulais faire, c'est d'appeler finish() dans l'activité enfant lorsque certains événements se produisent en activité parent c'est à dire en envoyant le message à diffusion générale de MainActivity à l'Activité de l'Enfant.
Voici le code à MainActivity lorsque l'événement a eu lieu (par exemple lors de la connexion réseau est interrompue, etc etc):
De l'enfant à l'activité de l'OnResume() fonction:
De l'enfant à l'activité de l'OnPause() fonction:
Des enfants dans l'activité de classe:
Espère que cette aide.
Ok ce qui a fonctionné pour moi était de déclarer la
onNotification
méthode comme suit: