【发布时间】:2012-06-28 10:55:15
【问题描述】:
在我的申请中,我发出以下声明:
toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
在运行 Android 2.3.3 的廉价 LG LS670 上运行良好,但在我拥有的所有其他手机(从 Android 2.2.1 到 Android 2.3.4)上完全没有声音。
所以我知道操作系统版本在这里不起作用(我还在文档中验证了它从 API 1 开始就受支持)。
此外,铃声音量和媒体音量都设置为最大,并且toneGenerator 初始化为:
toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
我确认Settings.System.DTMF_TONE_WHEN_DIALING 设置为 1。
对这种不一致的行为(跨不同手机)感到困惑,我检查了发生这种情况时的系统日志,我发现的唯一可疑差异是那些未能发出声音的手机@987654326 @在他们的日志中有这一行:
AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
AudioFlinger 的用途是什么?它与静音TONE_PROP_ACK 有什么关系?
任何idea 如何修复我的代码以使 TONE_PROP_ACK 始终响起,无论手机型号如何?
【问题讨论】:
-
Audio flinger 是一个系统组件,用于管理来自 android userpsace 的音频,然后将其交给内核驱动程序。您是否能够从任何音调功能中获得声音?您是否看到 API 文档中关于音频路由可变的部分?无论如何,您真正想要完成什么 - 您知道这些音调不会通过呼叫上行链路,对吧?
-
@ChrisStratton 是的,我知道这些音调不会通过呼叫上行链路。这实际上是我的首选行为,因为我只是想给出一个声音提示(不一定是 DTMF)。当我使用电话的拨号活动时,我能够从提示音功能中获得声音。您能否详细说明“音频路由可变”?我在 API 文档中的哪里可以找到该部分?直接 URL 将是超级的。谢谢+1。
-
routing=0forio 25意味着 AudioFlinger 正在告诉一个特定的音频流(在这种情况下我猜是 AudioStreamOut)它应该路由到“无处”。音频 HAL 将如何处理是特定于实现的 - 所以它可能是例如保持该流的路由不变。
标签: android android-audiomanager dtmf audioflinger