我正在尝试构建一个在接受和拒绝调用时记录的应用程序。因此,我使用的是 PhoneStateListener。

当我在 onCreate() 方法中启动监听器时,它会在一段时间后停止其 Activity 。据我所知,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");
        }
        }
    }
}

我从 Listeners 构造函数中获得 Log 输出,但是每当发生变化(比如我调用某人)时,什么也没有发生。

onCreate() 开始的同一个监听器工作正常。

也许我错过了什么

我刚试过:
我试图在服务的 while 循环中向 TelephonyManager 询问电话状态。这工作正常。但我想这只是一个肮脏的解决方法。

有没有人知道可能是什么问题?

最佳答案

您正在 onHandleIntent 上注册 PhoneStateListener 而不是在 onStartCommand 或 onCreate 函数中注册您的监听器,并确保您在项目 list 中提到了以下权限

关于Android:PhoneStateListener 在服务中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9331733/

10-08 23:52