Как приостановить и воспроизвести аудиопоток при получении телефонного звонка - PullRequest
2 голосов
/ 13 декабря 2011

Я передаю аудио в моем приложении.Это сделано, но когда я получаю вызов, я должен приостановить поток, пока вызов не закончится, и затем воспроизвести поток снова.Можно ли приостановить и воспроизвести поток при получении вызова в Android?

Ответы [ 3 ]

5 голосов
/ 06 мая 2016

Вы должны использовать слушателей Audio Focus.Состояние телефона НЕ требуется для этого, и это действительно плохая практика (поскольку разрешение полностью нарушает конфиденциальность).

Самое лучшее в этом - то, что вы также получите предупреждение, когда пользователь начнет играть музыкув другом приложении или когда навигация пытается что-то сказать.

Здесь есть хороший документ о том, как его использовать:

http://developer.android.com/training/managing-audio/audio-focus.html

3 голосов
/ 13 декабря 2011

Вы можете использовать PhoneStateListener, чтобы увидеть состояние телефона и приостановить аудиопоток, когда телефон используется.Ссылка android показывает обратные вызовы, которые вы можете использовать, а этот пример показывает, как его использовать.Обратите внимание, что вам нужно добавить разрешение в манифест:

<uses-permission android:name="android.permission.READ_PHONE_STATE">
0 голосов
/ 16 января 2012

Попробуйте этот более простой код, я проверял это ... (полный код здесь http://blog.kerul.net/2012/01/how-to-pause-audio-while-call-is.html)

public class UrClassActivity {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    private MediaPlayer mp;
    ...
    ...
    ...
    //this is a code segmentation
    //THis two lines of codes need to be inserted to the onCreate method
    //This following codes dealing with the phone-state
    //detect voice incoming call
    //onCallStateChanged method will be executed if there's incoming
    //or outcoming call
    PhoneStateListener phoneStateListener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if (state == TelephonyManager.CALL_STATE_RINGING) {
                //INCOMING call
                //do all necessary action to pause the audio
                if(mp!=null){//check mp
                    setPlayerButton(true, false, true);

                    if(mp.isPlaying()){ 

                        mp.pause();
                    }
                }

            } else if(state == TelephonyManager.CALL_STATE_IDLE) {
                //Not IN CALL
                //do anything if the phone-state is idle
            } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
                //A call is dialing, active or on hold
                //do all necessary action to pause the audio
                //do something here
                if(mp!=null){//check mp
                    setPlayerButton(true, false, true);

                    if(mp.isPlaying()){ 

                        mp.pause();
                    }
                }
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };//end PhoneStateListener

    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    if(mgr != null) {
        mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
    ...
    ...
    ...

}//end onCreate

}//end class
...