【问题标题】:Use AudioTrack with AudioManager setSpeakerphoneOn将 AudioTrack 与 AudioManager setSpeakerphoneOn 一起使用
【发布时间】:2013-01-18 17:59:53
【问题描述】:

我正在使用 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);

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

【问题讨论】:

    标签: android audiotrack android-audiomanager


    【解决方案1】:

    首先,您需要在清单中声明用户权限 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);
      

    【讨论】:

    • 非常感谢您的回复。我已经使用了这个权限。并确实解决了我的一个问题。默认情况下,扬声器不再打开。但是使用这段代码,我尝试运行音乐播放器,它开始在前置扬声器上运行。知道如何将其更改为默认值吗?
    • 默认是设备用户在启动你的应用之前设置的。关键是将 AudioManager 设置恢复到更改之前的状态。因此,如果扬声器电话在您的应用启动之前关闭,那么它会在您的应用停止时关闭。
    • @hsigmond 如果我们在 AudioTrack 启动后更改模式可以吗?
    【解决方案2】:

    关闭应用时设置此项。

    m_amAudioManager.setMode(AudioManager.MODE_NORMAL);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多