J'ai une activité où j'ai EditText pour l'utilisateur d'entrer certaines données. Après que l'utilisateur a écrit du texte et clique sur le bouton, il attend une réponse de BroadcastReceiver. Le problème est que tout fonctionne pour la première fois et que l'utilisateur reçoit une réponse, mais si l'utilisateur ne quitte pas l'activité et clique à nouveau sur le bouton, BroadcastReceiver ne se déclenche plus. Si l'utilisateur ferme l'activité et l'ouvre à nouveau, BroadcastReceiver fonctionne de nouveau mais seulement pour la première fois.BroadcastReceiver se déclenche une seule fois
Ceci est un peu déroutant. Voici mon code:
public void onCreate(Bundle savedInstanceState) {
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent in) {
switch (getResultCode()) {
case Activity.RESULT_OK:
mStatus = true;
break;
}
}
};
getActivity().registerReceiver(mReceiver,
new IntentFilter(FLAG));
}
lorsque l'utilisateur clique bouton:
Intent in = new Intent(FLAG);
PendingIntent pIn = PendingIntent.getBroadcast(context, 1, in, 0);
SmsManager.getDefault().sendTextMessage("123456789", null, "text", pIn, null);
while(!mStatus){
}
mStatus = false;
récepteur Désenregistrer:
public void onPause() {
super.onPause();
getActivity().unregisterReceiver(mReceiver);
}
Que pensez-vous? Pourquoi cela ne fonctionne que lorsque l'activité est démarrée et que le bouton est cliqué pour la première fois?
Voulez-vous dire que l'utilisateur quitte l'activité, revenez et cliquez à nouveau sur le bouton? – CChi
@CChi, cela fonctionne. Si l'utilisateur existe et revient, cela fonctionne. Le problème est que si l'utilisateur reste en activité et veut cliquer sur le bouton par exemple 6 fois, seulement la première fois qu'il a cliqué, cela fonctionnera. Autre cinq fois, il ne fera rien. – user3339562
Est-ce que _not_ n'utilise pas une boucle infinie sur le thread principal, même avec le 'sleep()' suggéré par quelqu'un. Vous n'avez pas besoin de vérifier constamment l'état de la variable. Il suffit de démarrer le code attendu de "onReceive()" quand il reçoit la diffusion. –