2011-01-15 3 views
3

Lors du débogage du code ci-dessous, BroadcastReceiverCustom est appelé mais PhoneStateListenerCustom ne l'est pas.BroadcastReceiver appelé mais PhoneStateListener non appelé

Pour l'instant je et en faisant l'action requise dans BroadcastReceiverCustom seulement, mais ne peut pas être le meilleur endroit pour le faire. Des suggestions pour lesquelles PhoneStateListener n'est pas appelé ?? Déjà passé beaucoup de temps pour des raisons possibles, aucune idée? Le fichier manifeste est correct avec les autorisations appropriées. Je ne vois aucune exception d'exécution.

BroadcastReceiverCustom.java

public class BroadcastReceiverCustom extends BroadcastReceiver { 

private static final String TAG = "BroadcastReceiverCustom"; 

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

     Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!"); 

     TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     PhoneStateListenerCustom phoneStateListenerCustom = new PhoneStateListenerCustom(); 
     telephony.listen(phoneStateListenerCustom, PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

PhoneStateListenerCustom.java

public class PhoneStateListenerCustom extends PhoneStateListener { 

    private static final String TAG = "PhoneStateListenerCustom"; 

    public void onCallStateChange(int state, String incomingNumber){ 

     Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!"); 
     switch(state){ 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.d(TAG, "RINGING"); 
       break; 
     } 

     super.onCallStateChanged(state, incomingNumber); 

    } 
} 

fichier Manifest

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<receiver android:name=".BroadcastReceiverCustom"> 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

Répondre

4

vous ne devriez pas instancier le TelephonyManager et PhoneStateListener dans le BroadcastReceiver. voici quelques exemples de code:

en activité:

EndCallListener callListener = new EndCallListener; 
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE); 

private class EndCallListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     if(TelephonyManager.CALL_STATE_RINGING == state) { 
      Log.i(LOG_TAG + "Listener", "RINGING, number: " + incomingNumber); 
     } 
     if(TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      Log.i(LOG_TAG + "Listener", "OFFHOOK, number: " + incomingNumber); 
     } 
     if(TelephonyManager.CALL_STATE_IDLE == state) { 
      Log.i(LOG_TAG + "Listener", "IDLE, number: " + incomingNumber); 
     } 
    } 
} 
+1

évidemment vous ne recevrez pas un incomingNumber pour les États DECRO et oisive. c'était un code que j'avais écrit pour illustrer ce fait. – moonlightcheese

1

essayer d'ajouter la @Override avant que la méthode onCallStateChange

Questions connexes