2013-01-18 10 views
7

私はAudioTrackを使用してUDPソケットで受信したサウンドを再生しています。私は音とともに多くのノイズを受けているので、AudioManagerを使用することに決めました。しかし、AudioManagerはサウンドルーティングをアプリケーション境界を超えて変更します。以下は私が使用しているコードです。AudioTrackをAudioManagerで使用するsetSpeakerphoneOn

 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); 
     m_amAudioManager.setSpeakerphoneOn(false); 

このコードの問題は、私はアプリを閉じて音楽プレーヤーを起動したときに、音がフロントスピーカーとないususalバックスピーカーから来ていると私は何とかそれを変更することはできませんということです。 この問題を解決するために、私は自分のアプリケーションを閉じるときに次の行を追加することにしました。

しかし、この電話では、通話(通常の通話)を受信すると、デフォルトでスピーカーがオンになるという問題があります。私は本当にこれで助けが必要です。

答えて

12

まず、AudioManager設定を変更するには、マニフェストでユーザー権限MODIFY_AUDIO_SETTINGSを宣言する必要があります。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. いずれかの設定を変更する前に、現在のAudioManagerの設定を保存する必要があります!

    oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  2. 設定アプリを閉じるときにこれを設定

    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn); 
    audioManager.setMode(oldAudioMode); 
    audioManager.setRingerMode(oldRingerMode); 
    
+0

お返事ありがとうございます。私はこの許可を使用しました。私の問題の一つを修正しました。スピーカーはデフォルトではオンになっていません。しかし、このコードで、私は音楽プレーヤーを実行しようとし、それはフロントスピーカーで実行を開始しました。それをデフォルトに変更する方法はありますか? – SoH

+0

デフォルトは、アプリを起動する前にデバイスのユーザーが設定したものです。要点はAudioManagerの設定を復元する前の状態に復元することです。アプリが起動する前にspeakerPhoneがオフになっていると、アプリが停止してもオフになります。 – TouchBoarder

+0

AudioTrackの起動後にモードを変更しても、@hsigmondでも問題ありませんか? – onmyway133

1

を復元し、仕上げに続いて、あなたのオーディオの設定(例)

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
audioManager.setMode(AudioManager.MODE_NORMAL); 
audioManager.setSpeakerphoneOn(true); 
  • を適用します。

    m_amAudioManager.setMode(AudioManager.MODE_NORMAL);

  • 関連する問題