Я сделал пример приложения и PhoneStateListenerPhoneStateListener TelephonyManager не называется на Нуга
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 =», и я нацелен на sdk 22, поэтому никаких разрешений времени выполнения я не считаю. В моем более крупном приложении у меня есть код, вставленный как в основное действие, так и в долговременную службу, и не получать события изменения состояния. Они работают, когда я запускаю свой код на андроиде < 7.0, и я понятия не имею, почему. Не видите ничего существенного в журналах предупреждений или ошибок.
Вы достигли какого-либо прогресса в этом вопросе? У меня действительно есть аналогичная проблема. В эмуляторе для 7.1 это работает так, как ожидалось, но у меня есть пользователи, которые сообщают, что означает, что слушатель не вызывается на своих устройствах Pixel. Я отправлю, если я сделаю все возможное. – Pinsickle
@ Pinsickle, что я закончил делать, просто использовал приемник широковещательного приемника вместо регистрации слушателя. – L7ColWinters
У меня такая же проблема. My targetSdkVersion 26, и я запрашиваю все разрешения. Я хочу обернуть прослушиватель Observable (RxJava). Полный тест здесь https://github.com/tim4dev/dirty_code/tree/master/Rx-Listener-to-Observable На Android 4.2 отлично работает. На Android 8.0 называется 2--3 раза и мертв. Шагов для воспроизведения: приложения запуска на Android 8 (на реальном устройстве или эмуляторе), вызова, прессы разъединения (от крючка), если вы делаете это достаточно быстро - все будет нормально, если слушать короткие звуковые сигналы и ждать, Слушатель умирает и больше не реагирует. Я избегал проблемы путем простого объединения (RxJava). – tim4dev