Android - 現在再生中のオーディオ アプリケーションをミュートできますか?
-
22-09-2019 - |
質問
こんにちは、私はこれについては初めてです。私の独学プロジェクトは、音声ニュース ストリームを再生する小さなアプリケーションです。効果を発揮するには、アプリケーションが現在再生中のメディア プレーヤーを中断する必要があります (例:Last FM、Imeem、音楽プレーヤー、Spotify など)。
何が再生されるのか、どのアプリケーションが再生するのかわかりませんが、すべてが終わるまで一時停止してもらいたいと思います。かなり大胆に聞こえるかもしれませんが、電話がかかってくると基本的にはそうなるのですから、それは可能なはずです。
すべてのオーディオ プレーヤーに、少しの間一時停止するように求めるメッセージを送信できますか?かかる時間だけ、着信をなりすますことはできますか?
ありがとう。
解決
オーディオ取り扱いがしばらくの間、かなり恐ろしいことになるだろう。 APIは、かなり奇妙です悪い文書化、および変更/バージョン間で破り/卑下続けます。でもAudioManager
コードはそれでFIXMEsを持っています。
とにかく、そこの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
に戻って変更したいとき、あなたは本物の電話は、その時点で起こっていないことを確認する必要があります...
たぶん、あなたは別のストリームタイプではなく、音声通話のいずれかを使用することができますが、私はちょうど<全角>は、オーディオ再生用スピーカーフォンやイヤホンのいずれかを使用することができ、アプリ上で作業の経験から話しては音声通話ストリームの使用ます。
のように私が言った、オーディオの取り扱いが...特に楽しみではありません。)
他のヒント
2年が経ちました。しかし、これが誰かの助けになれば幸いです。
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);
注記: 電話したら setStreamMute(int, boolean) ストリームをミュートするには n 時々、電話する必要があります n もう一度ミュートを解除するには(使用 false
).
適切な方法は、AudioManager.requestAudioFocus(...)
方法
あなたが試すことができ AudioManager.adjustVolume の方法:
AudioManager audioMan =
(AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);