2011-01-15 7 views
3

aufgerufen Beim Debuggen des folgenden Codes wird BroadcastReceiverCustom aufgerufen, aber PhoneStateListenerCustom ist nicht.BroadcastReceiver wird angerufen, aber PhoneStateListener wird nicht

Für jetzt ich und die erforderliche Aktion in BroadcastReceiverCustom nur, , aber vielleicht nicht der beste Ort, um es zu tun. Irgendwelche Vorschläge, warum PhoneStateListener nicht angerufen wird ?? Schon viel Zeit aus möglichen Gründen verbracht, keine Ahnung ?? Manifest-Datei ist korrekt mit korrekten Berechtigungen. Ich sehe keine Laufzeitausnahmen.

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); 

    } 
} 

Manifest-Datei

<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> 

Antwort

4

Sie sollten die TelephonyManager und PhoneStateListener im BroadcastReceiver nicht instanziiert. hier einige Beispiel-Code:

in Aktivität:

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

Zugabe erhalten Sie keine incomingNumber für die OFFHOOK und IDLE Staaten erhalten. Das war ein Code, den ich geschrieben hatte, um diese Tatsache zu veranschaulichen. – moonlightcheese

1

versuchen, die offensichtlich @Override vor dem onCallStateChange Methode