Android 将AudioTrack与AudioManager手机配合使用

Android 将AudioTrack与AudioManager手机配合使用,android,audiotrack,android-audiomanager,Android,Audiotrack,Android Audiomanager,我正在使用AudioTrack播放通过UDP套接字接收到的声音。我的声音中有很多噪音,所以我决定使用AudioManager。但是AudioManager改变声音路由超出了应用程序的范围。下面是我正在使用的代码 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); m_amAudioManager.setMode(AudioManager.MODE_IN

我正在使用AudioTrack播放通过UDP套接字接收到的声音。我的声音中有很多噪音,所以我决定使用AudioManager。但是AudioManager改变声音路由超出了应用程序的范围。下面是我正在使用的代码

        m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
        m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); 
        m_amAudioManager.setSpeakerphoneOn(false); 
这个代码的问题是,当我关闭应用程序并启动音乐播放器时,声音来自前扬声器,而不是通常的后扬声器,我无法以某种方式更改它。 为了解决这个问题,我决定在关闭应用程序时添加以下行

 m_amAudioManager.setSpeakerphoneOn(true);

但这条线路的问题是,当我接到一个电话(正常通话)时,默认情况下扬声器是打开的。我真的需要你的帮助

首先,您需要在清单中声明用户权限“修改音频设置”,以更改AudioManager设置

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  • 应用音频设置(示例)

  • 然后在完成时,恢复设置

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

  • 关闭应用程序时设置此选项


    m_amAudioManager.setMode(AudioManager.MODE_NORMAL)

    非常感谢你的回复。我已经使用了这个许可。解决了我的一个问题。默认情况下,扬声器不再打开。但是有了这个代码,我试着运行音乐播放器,它开始在前扬声器上运行。知道如何将其更改为默认值吗?默认值是设备用户在启动应用程序之前设置的值。关键是要将AudioManager设置恢复到更改前的状态。所以,如果你的应用程序启动前扬声器已关闭,那么当你的应用程序停止时扬声器将关闭。@Xigmond如果我们在AudioTrack启动后更改模式,可以吗?
    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    audioManager.setMode(AudioManager.MODE_NORMAL);
    audioManager.setSpeakerphoneOn(true);
    
    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn);
    audioManager.setMode(oldAudioMode);
    audioManager.setRingerMode(oldRingerMode);