Frage

Während des Debugges des folgenden Codes wird der Rundfunkstift aufgerufen, aber Phonestatelistenercustom ist dies nicht der Fall.

Im Moment und ich erforderte nur Maßnahmen im Rundfunkstock, aber Maynot ist der beste Ort, um dies zu tun. Irgendwelche Vorschläge, warum Phonestatelistener nicht angerufen wird? Ich habe schon viel Zeit aus möglichen Gründen verbracht, keine Ahnung? Die Manifestdatei ist mit korrekten Berechtigungen korrekt. Ich sehe keine Laufzeitausnahmen.

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

    }
}

Manifestdatei

<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>
War es hilfreich?

Lösung

Sie sollten den TelephonyManager und den Phonestatelistener im Rundfunkstock nicht instanziieren. Hier ist ein Beispielcode:

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

Andere Tipps

Versuchen Sie das Hinzufügen der @Override Vor dem onCallStateChange Methode

Ich wollte nur hinzufügen, dass Vairavan in erwähnt wird Dies Antwort, dass es eine interne Veränderung in der Referenzung des Phonestatelistenereres gab. Es wird nun in einer schwachen Referenz gehalten, was bedeutet, dass die Phonestatelistener -Instanz, sobald die Methode zurückkehrt, für die Müllsammlung elegierbar ist. Daher sollten Sie die Referenz in einer Klasse halten, die für die Lebensdauer, die Sie erwarten, auf Rückrufe zu hören, wie z. Activity, Service, oder Application Klassen.

Sehen: https://github.com/aosp-mirror/platform_frameworks_base/commit/f5d7c587e86c64e657a15a12AD70E75D47C48D99#diff-5AC89DE823CF60597E54BF67FE0.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top