繁体   English   中英

Android AudioManager.setMode(MODE_NORMAL)失败

[英]Android AudioManager.setMode(MODE_NORMAL) fails

我正在开发2个需要协同工作的VoIP应用程序; 一个是软电话应用程序(App A),它使用各种音频模式,如RINGTONE,IN_COMMUNICATION等。另一个应用程序(App B)需要音频模式NORMAL。 我尝试确保彼此玩得很好,所以当软电话App A完成一个电话时,它会将音频模式恢复为NORMAL。 同样,如果App B需要在App A正在做的事情中间运行,它会保存它找到的音频模式并在完成后恢复。

例如,对于入站呼叫,App A可能会更改音频模式,如下所示:

  1. 当呼叫进来时,MODE_RINGTONE
  2. 连接呼叫时MODE_IN_COMMUNICATION
  3. 呼叫终止后MODE_NORMAL

如果App B在连接呼叫时需要做某事(上面的步骤2),它会

  1. 保存MODE_IN_COMMUNICATION
  2. 设置MODE_NORMAL
  3. 做它需要做的事情
  4. 恢复MODE_IN_COMMUNICAITON

两个应用程序都使用其应用程序上下文获取Android AudioManager。

我遇到的问题是,一旦App B完成上述步骤,App A就会在呼叫终止后尝试将音频模式恢复为NORMAL。

myAudioManagerReference.setMode(AudioManager.MODE_NORMAL);
if (myAudioManagerReference.getMode() != AudioManager.MODE_NORMAL)
  Log.w(CLASSTAG, "failure to set audio mode to MODE_NORMAL);

我的App B是否可以对AudioManager模式进行某种锁定? 或者更改了App A的权限,使其无法将模式更改回NORMAL? 我发现一旦我退出App B,App A就可以成功地将模式更改为NORMAL。

这看起来很可能是一个固件问题。 我在这台设备(工业移动设备)上看到来自ALSA驱动程序的可疑日志,看起来驱动程序有时会使用错误的PID来改变音频模式。 我也无法在任何其他设备上重新创建相同的问题,包括来自同一制造商的一些设备。

不幸的是,我还没有得到制造商(以及ALSA驱动程序编写者)的确认,就是这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM