2017-10-09 117 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也保持不變。

我希望這個小提示可以幫助我們找到解決方案!

相關問題