草庐IT

android - cordova 蓝牙音箱没有声音

coder 2024-01-28 原文

我正在开发一个 android(和 IOS)应用程序,该应用程序可以毫无问题地播放音频消息。我的问题如下: 如果手机已经连接到蓝牙(蓝牙已启用并已连接),那么我会启动我的应用程序并播放音频文件,在这种情况下,我在电话和蓝牙扬声器上都听不到任何声音。

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

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

有没有人遇到同样的问题,你能帮我找到另一个解决方案吗?

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

有什么想法吗?

最佳答案

这里完全一样的问题!我正在为使用 Cordova (7.1.0) 构建的 Android (6.4.0) 和 iOS (4.5.3) 开发一个音乐网络应用程序。我使用 webaudio API 来播放声音。除此特定情况外,所有平台上的一切都很好:

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

  • Samsung J3 (Android v5.1.1) = 没有声音播放
  • LENOVO TB2 (Android v5.1.1) = 没有声音播放
  • HUAWEI VTR (Android v7.0) = 没有声音播放
  • LG G6 (Android v7.0) = 它的工作原理非常棒!

不幸的是,我还没有找到任何“干净”的解决方案。我做的和你的一样(BT=bluetooth):

  1. 如果已连接,则强制禁用 BT,
  2. 重新加载整个页面,
  3. 重新连接蓝牙。

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

This represents the number of seconds of processing latency incurred by the AudioContext passing the audio from the AudioDestinationNode to the audio subsystem [...]

我的理解是,此属性为您提供了 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)

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

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

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

关于android - cordova 蓝牙音箱没有声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649095/

有关android - cordova 蓝牙音箱没有声音的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  5. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  6. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  7. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

  8. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  9. ruby - 没有轨道的 ActiveRecord 时区 - 2

    我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A

  10. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

随机推荐