2012-02-23 5 views
0

J'ai besoin d'un écouteur large application pour déterminer quand l'état du service change sur le téléphone. J'ai parcouru tous les exemples en ligne, j'ai copié la ligne, modifié le manifeste, et je ne peux rien faire pour travailler.NE PEUT PAS faire fonctionner PhoneStateListener. J'ai vu les exemples

Est-ce qu'un auditeur d'état de téléphone doit avoir été en activité? Est-ce que je peux avoir de la vieille classe pour écouter un changement d'état?

C'est très frustrant.

Dans ma classe, je ...

 private class ServiceReceiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(android.content.Context context, Intent intent) { 

      Log.i(TAG, "onReceive"); 

      MyPhoneStateListener qpsl = new myPhoneStateListener(); 
      TelephonyManager tm = (TelephonyManager)context.getSystemService(android.content.Context.TELEPHONY_SERVICE); 
      tm.listen(qpsl, PhoneStateListener.LISTEN_SERVICE_STATE); 
     } 
    } 

    private class MyPhoneStateListener extends PhoneStateListener{ 

public void onServiceStateStateChanged(ServiceState serviceState){ 
    Log.i(TAG, "ServiceState = " + serviceState.getState(); 
} 

Je sais que je dois modifier le manifeste pour le récepteur de radiodiffusion et phonestate. Où? Je veux cette application large.

C'est tout le code que j'ai, quelqu'un peut-il me montrer ce qui me manque pour que je puisse écouter un changement d'état de service?

Répondre

0

Je soupçonne que la raison pour laquelle rien ne fonctionne pour vous est que la diffusion n'est jamais reçue. Quelle diffusion avez-vous enregistré dans le manifeste? Rappelez-vous, le changement d'état du téléphone n'est pas une diffusion "traditionnelle". Vous devez enregistrer cet objet PhoneStateListener à la place.

Dans tous les cas, vous n'avez pas besoin de BroadcastReceiver pour cela. Utilisez simplement Service à la place. Il suffit de déplacer le code de onReceive() ci-dessus dans onStartCommand() d'un Service et vous devriez être bon à faire.

J'ai implémenté quelque chose de similaire dans une simple application "Poor Signal History" et ça marche très bien. Le projet est téléchargé here.

+0

Que dois-je mettre dans le manifeste pour que cela fonctionne? Comment enregistrer le récepteur? –

+0

Comme je l'ai dit, puisque l'état du téléphone n'est pas un 'Broadcast' traditionnel. Si cela avait été le cas, vous devriez l'enregistrer dans le manifeste et indiquer quelle est l'intention de diffusion de '' BroadcastReceiver''. La manière correcte d '"enregistrer" un auditeur d'état du téléphone est d'utiliser 'TelephonyManager'' écouter() 'méthode, que vous faites déjà. Maintenant tout ce que vous avez à faire est de sortir ce code de 'onReceive()' car il n'est jamais appelé. Cochez cette réponse sur SO - http://stackoverflow.com/a/8657099/570930 – curioustechizen

Questions connexes