参照android自带music源码内,MediaPlaybackService.java里的处理。
    private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
        public void onAudioFocusChange(int focusChange) {
            // AudioFocus is a new feature: focus updates are made verbose on purpose
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_LOSS:
                    Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS");
                    if(isPlaying()) {
                        mPausedByTransientLossOfFocus = false;
                        pause();
                    }
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
                    if(isPlaying()) {
                        mPausedByTransientLossOfFocus = true;
                        pause();
                    }
                    break;
                case AudioManager.AUDIOFOCUS_GAIN:
                    Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_GAIN");
                    if(!isPlaying() && mPausedByTransientLossOfFocus) {
                        mPausedByTransientLossOfFocus = false;
                        startAndFadeIn();
                    }
                    break;
                default:
                    Log.e(LOGTAG, "Unknown audio focus change code");
            }
        }
    };

解决方案 »

  1.   

        private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
            public void onAudioFocusChange(int focusChange) {
                // AudioFocus is a new feature: focus updates are made verbose on purpose
                switch (focusChange) {
                    case AudioManager.AUDIOFOCUS_LOSS:
                        Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS");
                        if(isPlaying()) {
                            mPausedByTransientLossOfFocus = false;
                            pause();
                        }
                        break;
                    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                        Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
                        if(isPlaying()) {
                            mPausedByTransientLossOfFocus = true;
                            pause();
                        }
                        break;
                    case AudioManager.AUDIOFOCUS_GAIN:
                        Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_GAIN");
                        if(!isPlaying() && mPausedByTransientLossOfFocus) {
                            mPausedByTransientLossOfFocus = false;
                            startAndFadeIn();
                        }
                        break;
                    default:
                        Log.e(LOGTAG, "Unknown audio focus change code");
                }
            }
        };