开发者

Pause music player on a phone call and again resume it after phone call in android

I am using android.media.MediaPlayer object to play audio files in my app. Everything works fine but when a phone call comes while a song is playing the app does not pause the media player and you can hear the song during the phone call. Please tell me how to pause media player on a phone call and again resume it aft开发者_Python百科er call is ended.


Use a PhoneStateListener to find out when the phone is in use.


When your Activity (or service) is interrupted by the phone call place MediaPlayer#pause() into Activity#onPause and code that resumes playing into Activity#onResume I think the problem may be that the MediaPlayer is executed in its own thread and when your Activity is paused it doesn't mean that MediaPlayer is automatically paused as well


Introduce a PhoneStateListener in your Application like so:

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

Then you need to set it up in your onCreate() or in your onStartCommand() method in case of a Service:

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

and you can implement your version of the following methods:

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 is your static MediaPlayer object. I am using this within a service so you can drop out the isServiceRunning but this should work for anyone's case.


here is the permanent solution. Use audiomanager for getting audio focus. When call comes it calls AUDIOFOCUS_LOSS_TRANSIENT and you can pause the media player in that method. After call it calls AUDIOFOCUS_GAIN method so just call mediaplayer.start method .

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


I had a similar issue. My HTC Desire HD would stop the music when phone call arrived but does not resume after hang up. I found that is caused by the Viber application and when i removed "Viber", everything went back to normal. Now when I receive a call the music pauses and resumes after i finish talking.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜