2013-01-18 96 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後置揚聲器,我不能以某種方式改變它。 要解決此問題,我決定在關閉我的應用程序時添加以下行。

m_amAudioManager.setSpeakerphoneOn(true); 

但是這條線的問題是,當我接到一個呼叫(正常呼叫)時,默認情況下揚聲器已打開。我真的需要幫助。

回答

12

首先,您需要在聲明中聲明用戶權限MODIFY_AUDIO_SETTINGS以更改AudioManager設置。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. 您更改任何設置之前,您必須保存當前設置AudioManager!

    oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  2. 應用您的音頻設置(例)

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  3. 然後在完成,還原設置

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

非常感謝您的回覆。我已使用此權限。確實解決了我的一個問題。揚聲器默認不再使用。但是通過這段代碼,我嘗試運行音樂播放器,並開始在前置揚聲器上運行。任何想法如何將其更改爲默認? – SoH

+0

默認值是設備用戶在啓動應用程序之前設置的默認值。重點是將AudioManager Setting恢復到您更改之前的狀態。因此,如果在應用程序啓動之前揚聲器電話已關閉,則當您的應用程序停止時,它將關閉。 – TouchBoarder

+0

@hsigmond在AudioTrack啓動後改變模式可以嗎? – onmyway133

1

關閉應用程序時設置此項。

m_amAudioManager.setMode(AudioManager.MODE_NORMAL);