这里有完全相同的问题!我正在开发一个使用 Cordova (7.1.0) 构建的 Android (6.4.0) 和 iOS (4.5.3) 音乐网络应用程序。我使用 webaudio API 来播放声音。除以下特定情况外,所有平台在每个平台上都运行良好:
如果在启动应用程序之前启用并连接蓝牙,则根本不会播放任何声音。出现这个问题仅适用于 Android。在某些型号/类型的 Android 设备上它可以工作,在其他一些设备上则不能...示例:
- 三星 J3 (Android v5.1.1) = 没有声音播放
- LENOVO TB2 (Android v5.1.1) = 没有声音播放
- HUAWEI VTR (Android v7.0) = 没有声音播放
- LG G6 (Android v7.0) = 它的魅力十足!
不幸的是我还没有找到任何“干净”的解决方案。我做的和你的一样(BT=蓝牙):
- 如果已连接,则强制禁用 BT,
- 重新加载整个页面,
- 重新连接BT。
我在测试期间发现的唯一提示是关于 AudioContext 对象的属性。 AudioContext 对象有一个名为基本延迟. The 官方文档 https://webaudio.github.io/web-audio-api/#attributes-0不太清楚:
这表示 AudioContext 将音频从 AudioDestinationNode 传递到音频子系统所产生的处理延迟秒数 [...]
我的理解是,这个属性为您提供了 AudioContext 将声音传送到目的地所需的时间/延迟的估计(以秒为单位)......
在代码中初始化 AudioContext 后,您可以要求此基本延迟(只读属性):
var context = new AudioContext();
console.log(context.baseLatency);// 0.008 for example
我在测试过程中注意到,这个基本延迟是always每次出现问题时都高于 0.2。
蓝牙示例DISabled:
// baseLatency on computer = 0.008
// baseLatency on iOS devices = 0.05
// baseLatency on Android devices = 0.05
蓝牙示例ENabled:
// baseLatency on computer = 0.008 (same)
// baseLatency on iOS devices = 0.05 (same)
// baseLatency on (some) Android devices = 0.2 (HIGHER)
嗯,这个测试我做了数百次,每次的结果都是一样的。如果您在启动应用程序之前启用了 BTsomeAndroid 设备,基本延迟将高于 0.2 意味着 AudioContext 将无法在您的应用中播放任何声音。这不是我所知道的解决方案,但它可以通过让您确定应用程序是否会播放声音来提供一点帮助。
我尝试重新初始化 AudioContext 对象,但这根本不起作用...即使您重建 AudioContext 对象,baseLatency 也保持不变。
我希望这个小小的提示可以帮助我们找到解决方案!