10

こんにちは、私はこれが初めてです。私の独学プロジェクトは、オーディオ ニュース ストリームを再生する小さなアプリケーションです。効果的にするには、アプリケーションは現在再生中のメディア プレーヤー (例: Last FM、Imeem、音楽プレーヤー、Spotify など) を中断する必要があります。

何が再生されるのか、どのアプリケーションがそれを再生するのかはわかりませんが、完了するまですべてのユーザーに一時停止してもらいたいです。かなり大胆に聞こえるかもしれませんが、電話がかかってきたときは基本的にそれが起こるので、それは可能でなければなりません.

すべてのオーディオ プレーヤーに、一時停止するように求めるメッセージを送信できますか? かかる時間だけ、着信を偽装できますか?

ありがとう。

4

4 に答える 4

18

Android でのオーディオ処理は、しばらくの間、かなりひどいものになるでしょう。API はかなり奇妙で、文書化が不十分で、バージョン間で変更/非推奨/中断を続けています。コードにもAudioManagerFIXME が含まれています。

とにかく、Android にはいくつかのストリーム タイプ (音楽、通知、通話など) があり、アプリケーションは再生に適したものを選択するようになっています。大部分の Android アプリは音楽/メディア タイプ ( STREAM_TYPE_MUSIC) を使用する必要があると思います。MediaPlayerメソッドを使用してこれを設定しますsetAudioStreamType

SDK を使用すると、単一のストリームタイプをソロとして設定できます。これにより、他のすべてのストリームがミュートになります。通常、音楽アプリケーションはPhoneStateListener、着信時に を使用して一時停止します。

したがって、あなたのケースでは、通話ストリームを「借りて」、再生の開始時MediaPlayerにメソッド呼び出しを使用し、再生または完了時AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true)にストリームのソロを解除できます。falseActivity

これが機能することはわかりますが、音声通話ストリームを使用するときにオーディオモードも設定する必要があるかどうかをすぐに思い出せません(このように: )。それが必要な場合は、再生が完了したら必ずモードを戻す必要があります。そうしないと、音量ハード キーを押すたびに「通話中の音量」と表示されます。ただし、 に戻したい場合は、その時点で本物の電話がかかっていないことを確認する必要があります...MODE_IN_CALLAudioManager.setMode(AudioManager.MODE_IN_CALL)MODE_NORMALMODE_NORMAL

音声通話ではなく別のストリーム タイプを使用することもできますが、私は音声通話ストリームを使用する必要があるオーディオ再生にスピーカーフォンまたはイヤホンのいずれかを使用できるアプリで作業した経験から話しています。

私が言ったように、オーディオ処理は特に楽しいものではありません... ;)

于 2010-01-03T18:24:54.680 に答える
6

2年になります。しかし、これが誰かを助けることができることを願っています:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);

注:setStreamMute(int、boolean)を呼び出してストリームをn回ミュートする場合は、もう一度n回呼び出してミュートを解除する必要があります(use false)。

于 2012-03-18T17:35:35.960 に答える
2

適切な方法は、AudioManager.requestAudioFocus(...)メソッドを使用することです

http://developer.android.com/reference/android/media/AudioManager.html#requestAudioFocus%28android.media.AudioManager.OnAudioFocusChangeListener,%20int,%20int%29を参照してください 。

于 2013-03-08T02:51:07.127 に答える
0

AudioManager.adjustVolumeメソッド を試すことができます:

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
于 2010-01-03T11:46:41.313 に答える