2010-01-21 8 views
1

Mon application traite les appels entrants/sortants et affiche certaines interfaces utilisateur. J'utilise donc PhoneStateListener pour écouter les modifications telles que CALL_STATE_IDLE, CALL_STATE_RINGING, CALL_STATE_OFFHOOK. lors de la réception d'un appel à mon BroacastReceiver pour un appel entrant/sortant.Les événements PhoneStateListener cessent parfois de recevoir

La plupart du temps, les choses fonctionnent correctement. Mais parfois mon application ne reçoit pas les événements de PhoneStateListener et donc il n'est pas capable de changer/effacer l'interface utilisateur. À partir des commentaires des utilisateurs, cela se produit généralement sur HTC Hero. Mais je suis tombé sur ce problème parfois sur d'autres appareils.

Ma première supposition est que Android tue mon application à mi-chemin pendant l'appel en raison de la mémoire requise. Si oui, y at-il un moyen de s'assurer que Android ne tue pas mon application dans une telle situation.

Des pensées?

Répondre

1

Si oui, est-il possible de faire en sorte que android ne ma demande de tuer dans cette situation.

Non, il n'y en a pas.

Vous pouvez envisager de passer de PhoneStateListener à l'écoute de ACTION_PHONE_STATE_CHANGED diffusé Intents. De cette façon, votre code n'a pas besoin de rester en cours d'exécution.

+0

Le problème avec ACTION_PHONE_STATE_CHANGED est qu'il n'aura pas de contexte d'application d'origine. Donc, je ne serai pas capable d'interagir (changer/rejeter) avec l'interface utilisateur qui est encore visible pour l'utilisateur. Ou pensez-vous que, puisque l'interface utilisateur est toujours visible, le contexte d'application d'origine est toujours disponible et l'intention reçue à partir de la diffusion ACTION_PHONE_STATE_CHANGE pourra interagir avec l'interface utilisateur? – Tushar

+0

"Donc, je ne serai pas capable d'interagir (modifier/rejeter) avec l'interface utilisateur qui est encore visible pour l'utilisateur." Vous avez dit que votre application est en cours de fermeture pour libérer de la mémoire. À ce stade, vous n'avez pas d'interface utilisateur. Android ne ferme pas l'activité de premier plan pour des raisons de mémoire. Ainsi, si vous ne recevez pas les mises à jour de PhoneStateListener à partir d'une activité de premier plan, la consommation de mémoire n'est pas votre problème. Si vous n'avez pas d'activité de premier plan, aucune interface utilisateur n'est visible pour l'utilisateur. – CommonsWare

+0

Mon activité n'est pas au premier plan car elle doit fonctionner pendant les appels entrants/sortants. J'utilise toast/zone de notification pour l'interface utilisateur. – Tushar

0

J'ai eu le même problème: après quelques heures, il semblait que l'écoute a été abandonnée. Pour résoudre cela, j'ai créé un Timer qui répète toutes les 30 minutes l'appel à l'écoute: créer un Timer qui appelle une classe TimerTask dans le service qui contient les demandes d'écoute et faire l'appel Timer pour la classe TimerTask toutes les X millisecondes. Cela a fonctionné pour moi.

Questions connexes