Android: PhoneStateListener не работает в Сервисе - PullRequest
4 голосов
/ 17 февраля 2012

Я пытаюсь создать приложение, которое регистрирует, когда я принимаю и отклоняю вызовы.Поэтому я использую PhoneStateListener.

Когда я запускаю прослушиватель методом onCreate(), через некоторое время он прекращает свою деятельность.Насколько я знаю, Android закрывает приложение, потому что оно не фокусируется.

Я пытался обойти это поведение при запуске службы.Весь код, который я написал, работает нормально и не убивается Android ... но PhoneStateListener не получает никаких событий.

Как я запускаю Службу:

public class RunningService extends IntentService {

    /**
     * A constructor is required, and must call the super IntentService(String)
     * constructor with a name for the worker thread.
     */
    public RunningService() {
        super("RunningService");
    }

    /**
     * The IntentService calls this method from the default worker thread with
     * the intent that started the service. When this method returns,
     * IntentService stops the service, as appropriate.
     */
    @Override
    protected void onHandleIntent(Intent intent) {
        //...some code...creating a notification
        startForeground(12345, notification);

        TelephonyManager telephonyManager = (TelephonyManager) this
                .getSystemService(TELEPHONY_SERVICE);
        telephonyManager.listen(new PhoneStateListenerImpl(),
                PhoneStateListener.LISTEN_CALL_STATE);

        while (true) {
            ...some code to do...until Exit is called by user
        }
    }
}

PhoneStateListener с базовым выводом:

public class PhoneStateListenerImpl extends PhoneStateListener {

    public PhoneStateListenerImpl() {
        super();
        Log.v("psListener", "constructor");
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            Log.v("PhoneStateListener", "IDLE");
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            Log.v("PhoneStateListener", "OFFHOOK");
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            Log.v("State", "Ringing");
            break;
        default: {
            Log.v("Status", "something");
        }
        }
    }
}

Я получаю вывод Log из конструктора Listeners, но всякий раз, когда что-то меняется (как, например, я звоню кому-то), ничего не происходит.onCreate() отлично работает.

Может быть, я что-то упускаю

Я только что попытался: я попытался запросить у TelephonyManager состояние телефона в цикле while Службы.Это отлично работает.Но я думаю, это просто грязный обходной путь.

Кто-нибудь знает, в чем может быть проблема?

1 Ответ

0 голосов
/ 15 ноября 2018

вы регистрируете свой PhoneStateListener на onHandleIntent вместо того, чтобы регистрировать слушателя в функциях onStartCommand или onCreate, и убедитесь, что вы упомянули следующие разрешения в манифесте вашего проекта

...