web-dev-qa-db-ja.com

ヘッドセットが接続されている場合でも、スピーカーからオーディオを再生する方法は?

質問のタイトルが繰り返されているように見えるかもしれませんが、私の問題は時々問題であり、グリッチを引き起こします。以下のコードを使用して、ヘッドセットが接続されているときにスピーカーで再生しました。

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);

        audioManager.setMode(AudioManager.STREAM_MUSIC);
        audioManager.setSpeakerphoneOn(true);

        if(! Globals.mediaPlayer.isPlaying()){
            Globals.mediaPlayer.start();
        }

上記のコードは、次の方法でオーディオを再生します。1.非常にまれに、完全に再生されます。 2.ほとんどの場合、バックグラウンドでループサウンドが再生されます。 3.数回、何も再生しません。

ヘッドセットが接続されている場合、システムサウンドはエラーなしで再生されるようです。たとえば、着信音を設定すると、対応する着信音がグリッチなしで正しく再生されます。ヘッドセットを差し込んだスピーカーでサウンドを正しく再生する方法を教えてください。

21
crazy_coder

少し作業した後(多分それ以上)、その解決策を見つけました。

AudioManagerの設定を変更する代わりに、独自のMediaPlayerインスタンスを作成し、そのインスタンスのAudioストリームタイプを設定する必要があります。 STREAM_RINGに設定して、オーディオをヘッドセットとスピーカーにルーティングできます。

player.reset();
    player.setAudioStreamType(AudioManager.STREAM_RING);
    try {
        player.setDataSource(context, uri);
        player.prepareAsync();}

次に、onPreparedListenerをリッスンしてオーディオを開始できます。ブログをチェックしてください Androidのスピーカーからオーディオをルーティング より良い画像を取得するには。

12
crazy_coder

私が解決した同様の問題があり、再生されていない場合は新しいメディアプレーヤーを作成し、メディアプレーヤーのストリームタイプをオーディオマネージャーの同じモードに設定します。次のようなことを試してください。

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);

if(! Globals.mediaPlayer.isPlaying()){
    MediaPlayer mp = MediaPlayer.create(....);
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mp.start();
}

私の場合、私はAudioManager.MODE_IN_COMMUNICATIONを使用していました。また、権限を設定してください

<uses-permission Android:name="Android.permission.MODIFY_AUDIO_SETTINGS" />

androidManifest.xml

12
isma3l