0

私はオーディオプレーヤーとビデオプレーヤーを持ってアプリを持っています。オーディオプレーヤーがバックグラウンドで再生されているときにビデオを開始すると、オーディオプレーヤーが自動的に停止します。

ビデオを開くときにインテントを送信し、オーディオプレーヤーでそのインテントをリッスンし、onReceive()で停止することで、ブロードキャストレシーバーでこれを簡単に実現できます。

ただし、この機能をオーディオプレーヤーだけでなく、すべてのオーディオプレーヤーに拡張したいと思います。それで、ビデオプレーヤーが開いたときに送信する標準的な意図があるかどうかを考えましたか?

4

1 に答える 1

0

これにはオーディオフォーカスを使用する必要があります。Cf RandomMusicPlayerサンプルAndroidプロジェクト:

public class AudioFocusHelper {
    AudioManager mAM;
    MusicFocusable mFocusable;

    private final AudioManager.OnAudioFocusChangeListener listener = new AudioManager.OnAudioFocusChangeListener() {

        @Override
        /** 
         * Called by AudioManager on audio focus changes. We implement this by calling our
         * MusicFocusable appropriately to relay the message.
         */
        public void onAudioFocusChange(int focusChange) {
            if (mFocusable == null) return;
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_GAIN:
                    mFocusable.onGainedAudioFocus();
                    break;
                case AudioManager.AUDIOFOCUS_LOSS:
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    mFocusable.onLostAudioFocus(false);
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    mFocusable.onLostAudioFocus(true);
                    break;
                 default:
            }
        }
    };;

    public AudioFocusHelper(Context ctx, MusicFocusable focusable) {
        mAM = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
        mFocusable = focusable;
    }

    /** Requests audio focus. Returns whether request was successful or not. */
    public boolean requestFocus() {
        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
            mAM.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    }

    /** Abandons audio focus. Returns whether request was successful or not. */
    public boolean abandonFocus() {
        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAM.abandonAudioFocus(listener);
    }
}
于 2012-07-16T12:25:07.083 に答える