2015-02-02 3 views
4

Я разработал радиоприложение, где мне нужно приостановить радио при поступлении входящих/исходящих телефонных звонков. Я использовал PhoneStateListener, который отлично работает во всех версиях Android, кроме леденцов. Вот код, который я использовал для обработки телефонных звонков. Я пробовал использовать методы setStreamVolume и setStreamMute, но оба они, похоже, не работают на леденец. Пожалуйста, помогите мне в этом.PhoneStateListener не работает в android lollipop

Заранее спасибо.

   PhoneStateListener phoneStateListener = new PhoneStateListener() { 
       @Override 
       public void onCallStateChanged(int state, 
         String incomingNumber) { 
        switch (state) { 

        case TelephonyManager.CALL_STATE_RINGING: // Incoming 
                   // call: 
                   // Pause 
                   // music 
         if (Globals.isPlayerRunning) { 
          curVolume = audioManager 
            .getStreamVolume(AudioManager.STREAM_MUSIC); 
          audioManager.setStreamVolume(
            AudioManager.STREAM_MUSIC, 0, 0); 
          audioManager.setStreamMute(
            AudioManager.STREAM_MUSIC, true); 
          isServiceMuteByCall = true; 
         } 
         break; 

        case TelephonyManager.CALL_STATE_IDLE: // Not in 
                  // call: 
                  // Play 
                  // music 
         if (isServiceMuteByCall) { 
          isServiceMuteByCall = false; 
          audioManager.setStreamMute(
            AudioManager.STREAM_MUSIC, false); 
          audioManager.setStreamVolume(
            AudioManager.STREAM_MUSIC, curVolume, 
            AudioManager.FLAG_PLAY_SOUND); 
         } 
         break; 

        case TelephonyManager.CALL_STATE_OFFHOOK:// A call 
                   // is 
                   // dialing, 
                   // active 
                   // or 
                   // on 
                   // hold 
         if (Globals.isPlayerRunning) { 
          curVolume = audioManager 
            .getStreamVolume(AudioManager.STREAM_MUSIC); 
          audioManager.setStreamMute(
            AudioManager.STREAM_MUSIC, true); 
          audioManager.setStreamVolume(
            AudioManager.STREAM_MUSIC, 0, 0); 
          isServiceMuteByCall = true; 
         } 
         break; 
        } 
        super.onCallStateChanged(state, incomingNumber); 

       } 
      }; 

      if (mgr != null) { 
       mgr.listen(phoneStateListener, 
         PhoneStateListener.LISTEN_CALL_STATE); 
      } 
+0

вопрос, является phonestatelistener не работает или AudioManager? Пробовали ли вы несколько журналов, чтобы убедиться, что состояния телефона не прочитаны? – Opiatefuchs

+0

@Opiatefuchs - phonestatelister не увольняется – Ramesh

+0

@ ramesh6233 Я испытываю то же самое, нашли ли вы какое-либо решение своей проблемы? – drisse

ответ

2

Вот решение проблемы выше. Это можно решить с помощью BroadcastReceiver.

Создайте класс, который расширяет BroadcastReceiver и внутреннюю проверку onreceive для состояний телефона, как показано ниже.

public class TelephonyManagerReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())) { 

      String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

      if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) { 
       //stop the player or mute the audio here 
      } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) { 
       //start the player or unmute the audio here 
      } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) { 
       //stop the player or mute the audio here 
      } 
     } 
    } 
} 

после этого добавить выше радиовещательный приемник в файле манифеста.

<receiver android:name="com.radioapp.util.TelephonyManagerReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
</receiver> 

и убедитесь, что вы запрашивали разрешение в манифесте:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
+0

Я пробовал ваш код, но я получаю эту ошибку "не разрешено отправлять широковещательные android.intent.action.PHONE_STATE из pid = 23532, uid = 10107" – Ali786

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