我已经制作了一个示例应用程序和PhoneStateListener
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上运行我的代码时,它们都可以工作,我不知道为什么。在警告或错误日志中看不到任何实质性内容。
发布于 2016-11-11 09:12:28
尝试在服务的onCreate方法中注册侦听器。它适用于下面的me.Find示例代码:
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");
}
}
};
https://stackoverflow.com/questions/40183905
复制相似问题