Android でのオーディオ処理は、しばらくの間、かなりひどいものになるでしょう。API はかなり奇妙で、文書化が不十分で、バージョン間で変更/非推奨/中断を続けています。コードにもAudioManager
FIXME が含まれています。
とにかく、Android にはいくつかのストリーム タイプ (音楽、通知、通話など) があり、アプリケーションは再生に適したものを選択するようになっています。大部分の Android アプリは音楽/メディア タイプ ( STREAM_TYPE_MUSIC
) を使用する必要があると思います。MediaPlayer
メソッドを使用してこれを設定しますsetAudioStreamType
。
SDK を使用すると、単一のストリームタイプをソロとして設定できます。これにより、他のすべてのストリームがミュートになります。通常、音楽アプリケーションはPhoneStateListener
、着信時に を使用して一時停止します。
したがって、あなたのケースでは、通話ストリームを「借りて」、再生の開始時MediaPlayer
にメソッド呼び出しを使用し、再生または完了時AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true)
にストリームのソロを解除できます。false
Activity
これが機能することはわかりますが、音声通話ストリームを使用するときにオーディオモードも設定する必要があるかどうかをすぐに思い出せません(このように: )。それが必要な場合は、再生が完了したら必ずモードを戻す必要があります。そうしないと、音量ハード キーを押すたびに「通話中の音量」と表示されます。ただし、 に戻したい場合は、その時点で本物の電話がかかっていないことを確認する必要があります...MODE_IN_CALL
AudioManager.setMode(AudioManager.MODE_IN_CALL)
MODE_NORMAL
MODE_NORMAL
音声通話ではなく別のストリーム タイプを使用することもできますが、私は音声通話ストリームを使用する必要があるオーディオ再生にスピーカーフォンまたはイヤホンのいずれかを使用できるアプリで作業した経験から話しています。
私が言ったように、オーディオ処理は特に楽しいものではありません... ;)