2016-10-21 5 views
2

Я сделал пример приложения и 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, и я понятия не имею, почему. Не видите ничего существенного в журналах предупреждений или ошибок.

+0

Вы достигли какого-либо прогресса в этом вопросе? У меня действительно есть аналогичная проблема. В эмуляторе для 7.1 это работает так, как ожидалось, но у меня есть пользователи, которые сообщают, что означает, что слушатель не вызывается на своих устройствах Pixel. Я отправлю, если я сделаю все возможное. – Pinsickle

+1

@ Pinsickle, что я закончил делать, просто использовал приемник широковещательного приемника вместо регистрации слушателя. – L7ColWinters

+0

У меня такая же проблема. 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

ответ

3

Пробуйте регистрацию слушателя в методе onCreate вашего сервиса. Это работает для меня. Посмотрите примерный код ниже:

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"); 
     } 
    } 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^