Ete*_*ner 19 android dtmf android-audiomanager audioflinger
在我的应用程序中,我发出以下声明:
toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
Run Code Online (Sandbox Code Playgroud)
这对于运行Android 2.3.3的便宜的LG LS670非常有效,但在我拥有的所有其他手机上都没有,从Android 2.2.1到Android 2.3.4.
所以我知道操作系统版本在这里没有发挥作用(我还在文档中验证了它自API 1以来一直受支持).
此外,Ringer音量和媒体音量都设置为最大值,toneGenerator初始化为:
toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
Run Code Online (Sandbox Code Playgroud)
我确认Settings.System.DTMF_TONE_WHEN_DIALING设置为1.
此不一致的行为(在不同的手机),百思不得其解,我检查了系统日志时发生这种情况,唯一的区别怀疑我能找到是谁的手机未能声音TONE_PROP_ACK在他们的日志这一行:
AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
Run Code Online (Sandbox Code Playgroud)
AudioFlinger的目的是什么TONE_PROP_ACK?它与静音有什么联系?
任何想法如何修复我的代码,使得TONE_PROP_ACK总会响起,无论手机型号的?
小智 1
一种解决方法是在 Audacity 之类的工具中生成音调,并通过 SoundPool 或您选择的 api 来播放它。
根据Android文档ToneGenerator.TONE_PROP_ACK是:
1200Hz,100ms 开启,100ms 关闭 2 个突发
如果您选择 SoundPool,我建议保存为 ogg 文件格式并循环播放声音直至完成。同时以非常小的剪辑提供无缝音频,并且不使用大量资源。