Пауза музыкального проигрывателя по телефону и снова возобновить его после телефонного звонка в Android - PullRequest
5 голосов
/ 03 декабря 2009

Я использую объект android.media.MediaPlayer для воспроизведения аудиофайлов в моем приложении. Все работает нормально, но при поступлении телефонного звонка во время воспроизведения песни приложение не приостанавливает работу мультимедийного проигрывателя, и вы можете услышать песню во время телефонного звонка. Подскажите, пожалуйста, как приостановить воспроизведение медиаплеера по телефону и возобновить его после завершения вызова.

Ответы [ 5 ]

5 голосов
/ 03 декабря 2009

Используйте PhoneStateListener, чтобы узнать, когда телефон используется.

2 голосов
/ 03 декабря 2009

Когда ваша деятельность (или услуга) прерывается телефонным вызовом MediaPlayer#pause() на Activity#onPause и кодом, который возобновляет воспроизведение на Activity#onResume Я думаю, что проблема может заключаться в том, что MediaPlayer выполняется в своем собственном потоке, и когда Ваша активность приостановлена, это не означает, что MediaPlayer также автоматически останавливается

0 голосов
/ 08 февраля 2017

вот постоянное решение. Используйте audiomanager для получения аудио фокуса. Когда приходит вызов, он вызывает AUDIOFOCUS_LOSS_TRANSIENT, и вы можете приостановить воспроизведение мультимедиа в этом методе. После вызова он вызывает метод AUDIOFOCUS_GAIN, поэтому просто вызовите метод mediaplayer.start.

private AudioManager.OnAudioFocusChangeListener  afChangeListener = new AudioManager.OnAudioFocusChangeListener() {

            @Override
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            mMediaPlayer.start();}

else if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){

                mMediaPlayer.pause();
 }
0 голосов
/ 18 декабря 2015

Введите PhoneStateListener в свое приложение следующим образом:

private PhoneStateListener mPhoneListener = new PhoneStateListener() {
    public void onCallStateChanged(int state, String incomingNumber) {
        try {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    pauseStream();
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    resumeStream();
                    break;
                default:
            }
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
    }
};

Затем вам нужно настроить его в вашем onCreate () или в вашем методе onStartCommand () в случае службы:

        radioStream.setAudioStreamType(AudioManager.STREAM_MUSIC);
        radioStream.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer stream) {
                telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
                telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
                isMusicPlaying = true;
                isServiceRunning = true;
                stream.start();
            }
        });
        try {
            radioStream.prepare();
        } catch (IllegalStateException e1) {
            e1.printStackTrace();
            streamErrorHandler();
        } catch (IOException e1) {
            e1.printStackTrace();
            streamErrorHandler();
        }

и вы можете реализовать свою версию следующими методами:

public static void pauseStream() {
    if (isServiceRunning) {
        if (radioStream.isPlaying()) {
            isMusicPlaying = false;
            radioStream.pause();
        }
    } else {
        Log.i(TAG, "service isn't running");
    }
}

public static void resumeStream() {
    if (isServiceRunning) {
        if (!radioStream.isPlaying()) {
            isMusicPlaying = true;
            radioStream.start();
        }
    } else {
        Log.i(TAG, "service isn't running");
    }
}

radioStream - это ваш статический MediaPlayer объект. Я использую это в службе, чтобы вы могли исключить isServiceRunning , но это должно работать для любого случая.

0 голосов
/ 09 января 2012

У меня была похожая проблема. Мой HTC Desire HD останавливает музыку при поступлении телефонного звонка, но не возобновляет работу после зависания. Я обнаружил, что это вызвано приложением Viber, и когда я удалил «Viber», все вернулось на круги своя. Теперь, когда мне звонят, музыка останавливается и возобновляется после того, как я заканчиваю говорить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...