cordova在蓝牙音箱上没有声音

时间:2017-10-09 14:41:54

标签: android ios cordova bluetooth

我正在研究一个android(和IOS)应用程序,该应用程序播放音频消息没有问题。我的问题如下: 如果移动设备已经连接到蓝牙(蓝牙启用并连接),那么我启动我的应用程序并播放音频文件,在这种情况下我在电话机和蓝牙扬声器上都没有听到任何声音。

但是,如果我启动我的应用程序然后激活蓝牙,然后播放音频文件,没有问题,我的蓝牙扬声器声音很好。

我现在使用的解决方案是,当我启动我的应用程序时,我完全禁用了蓝牙,然后我在onDeviceready上重新启动它(使用插件cordova)它的工作方式就像那样但它不是理想的解决方案,它是非常讨厌用户说蓝牙断开并重新连接,特别是当它是汽车的蓝牙时。

有没有人有同样的问题,你可以帮我找到另一种解决方案。

我使用最新版本的Cordova(7.0.1),android(6.2.3)...... 我使用plugova cordova-plugin-bluetoothle重新启动蓝牙(禁用然后启动应用程序后启用)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这里完全相同的问题!我正在开发一个用Cordova(7.1.0)构建的Android(6.4.0)和iOS(4.5.3)的音乐webapp。我使用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 =蓝牙):

  1. 如果连接了BT,则强制禁用BT,
  2. 重新加载整个页面,
  3. 重新连接BT。
  4. 我在测试中发现的唯一提示是关于AudioContext对象的属性。 AudioContext对象具有名为 baseLatency 的属性。 official DOC并不是很清楚:

      

    这表示AudioContext将音频从AudioDestinationNode传递到音频子系统所引起的处理延迟秒数[...]

    我理解的是,此属性为您提供AudioContext将声音传送到目的地所需的时间/延迟估计(以秒为单位)...

    在您的代码中初始化AudioContext之后,您可以要求 baseLatency (只读属性):

    var context = new AudioContext();
    console.log(context.baseLatency);// 0.008 for example
    

    我在测试期间注意到,每次出现问题时,此baseLatency 始终高于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)
    

    嗯,我做了几次这个测试,每次都是相同的结果。如果在某些 Androids设备上启动应用程序之前启用了BT,则 baseLatency 将高于0.2,这意味着AudioContext将无法在您的应用中播放任何声音。这不是我所知道的解决方案,但这可以帮助您确定应用程序是否会发出声音。

    我尝试重新初始化AudioContext对象,但这根本不起作用...即使重构AudioContext对象,baseLatency保持不变。

    我希望这个微小的提示可以帮助我们找到解决方案!