首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Nougat上未调用电话管理器的PhoneStateListener

在Nougat上未调用电话管理器的PhoneStateListener
EN

Stack Overflow用户
提问于 2016-10-22 03:11:32
回答 1查看 3.9K关注 0票数 3

我已经制作了一个示例应用程序和PhoneStateListener

代码语言:javascript
复制
TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object
    telephony.listen(new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            Log.i("brian", "call state = " + state + " incoming number " + incomingNumber);
            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE:
                    break;
                case TelephonyManager.CALL_STATE_RINGING:

                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:

                    break;
            }
        }
    }, PhoneStateListener.LISTEN_CALL_STATE); //Register our listener with TelephonyManager

    Log.i("brian", "READ_PHONE_STATE = " + ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_PHONE_STATE));

工作正常,但是当我将上面的代码添加到更大的应用程序中时,只有在最初订阅它时才会调用onCallStateChanged。系统不会通知我任何电话状态更改。在这两个项目中,日志底线"READ_PHONE_STATE =“总是被授予的,而我的目标是SDK22,所以我认为没有运行时权限。在我的较大的应用程序中,我将代码粘贴到主活动和长期存在的服务中,两者都不会获得状态更改事件。当我在小于7.0的android上运行我的代码时,它们都可以工作,我不知道为什么。在警告或错误日志中看不到任何实质性内容。

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 09:12:28

尝试在服务的onCreate方法中注册侦听器。它适用于下面的me.Find示例代码:

代码语言:javascript
复制
    private TelephonyManager tm;

    @Override
    public void onCreate() {
        super.onCreate();

        //Set listener for TelephonyManager tm.
        tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }


private PhoneStateListener phoneStateListener = new PhoneStateListener() {
    public void onCallStateChanged(int state, String incomingNumber) {

        if (state == TelephonyManager.CALL_STATE_RINGING) {
                    Log.i(LOG_TAG,"State : RING RING");

        }
        if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    Log.i(LOG_TAG,"State : OFFHOOK");
        }

        if (state == TelephonyManager.CALL_STATE_IDLE) {
                    Log.i(LOG_TAG,"State : IDLE");
        } 
    }
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40183905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档