2017-10-09 128 views
2

我正在一个android(和IOS)应用程序,应用程序播放音频消息没有问题。我的问题如下: 如果手机已经连接到蓝牙(已启用蓝牙并已连接),如果然后启动我的应用程序,并在此情况下播放音频文件,则在电话或蓝牙扬声器上都不会听到任何声音。cordova蓝牙扬声器没有声音

但是,如果我启动我的应用程序,然后激活蓝牙,然后播放音频文件,没有任何问题,蓝牙扬声器上的声音就会消失。

我现在使用的解决方案是,当我启动我的应用程序时,我完全禁用蓝牙,然后在onDeviceready(使用插件cordova)上重新启动它,它的工作原理就像这样,但它不是理想的解决方案,它对于蓝牙断开连接和重新连接的用户来说,尤其是汽车的蓝牙是非常烦人的。

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

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

有什么想法吗?

+0

任何想法将不胜感激...... – Bmo85

回答

0

这里完全相同的问题!我正在为使用Cordova(7.1.0)构建的Android(6.4.0)和iOS(4.5.3)开发音乐Web应用程序。我使用webaudio API播放声音。除了在这个特定情况下,每种平台上的一切都很好:

如果在启动我的应用程序之前启用并连接了蓝牙,则没有任何声音可以播放。仅在Android上发生此问题。在某些型号/类型的Android设备的工作原理,在其他一些它不...例如:

  • 三星J3(安卓V5.1.1)=无声音播放
  • LENOVO TB2(安卓V5。 1.1)=没有声音玩
  • HUAWEI VTR(Android v7.0)=没有声音玩
  • LG G6(Android v7.0)=它的作品就像一个魅力!

不幸的是,我还没有找到任何'干净'的解决方案。我做同样的比你(BT =蓝牙):

  1. 力禁用BT,如果这一个连接,
  2. 重新加载整个页面,
  3. 重新连接的BT。

我在测试中发现的唯一提示是关于AudioContext对象的属性。 AudioContext对象具有一个名为baseLatency的属性。该official DOC是不是真的清楚:

这代表了通过将音频从AudioDestinationNode到音频子系统[中AudioContext发生的处理延迟的秒数...]

我明白那是什么这个属性给你一个估计(单位:秒)由AudioContext带来了声音他的目的地所需的时间/延迟...

权AudioContext后就一直在你的代码初始化,您可以要求该baseLatency(只读属性):

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

在我的测试中,我注意到了什么,是这baseLatency是总是高于0.2Ë问题发生时。

例与蓝牙禁用

// baseLatency on computer = 0.008 
// baseLatency on iOS devices = 0.05 
// baseLatency on Android devices = 0.05 

例与蓝牙启用

// baseLatency on computer = 0.008 (same) 
// baseLatency on iOS devices = 0.05 (same) 
// baseLatency on (some) Android devices = 0.2 (HIGHER) 

好吧,我做了这个测试上百次,每次相同的结果。如果在您启动应用程序之前启用了BT,则某些 Android设备,baseLatency将高于0.2,这意味着AudioContext将无法在您的应用中播放任何声音。这不是我所知道的解决方案,但通过让您知道应用程序是否会播放声音,这可能会有所帮助。

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

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

相关问题