我已经尝试过蓝牙 LE 广告,即使用 Android 手机作为 BLE“外围”设备。启动和停止持续的广告一次工作正常,但如果我想实际传输一些不同的数据,我需要在一个周期中启动、停止和重新启动广告,并始终更改广告包。
我当然在使用这些方法:
BluetoothLeAdvertiser.startAdvertising()
BluetoothLeAdvertiser.stopAdvertising()
至少在摩托罗拉 Moto G 4G 2nd gen 上。 (XT1072) 在 Android 5.0.2 中,循环只运行了一段时间,然后蓝牙堆栈出现问题,无法再开始新的广告。当快速运行循环时,这种情况发生得很快,如果运行缓慢,则需要更多时间,因此这可能与某些缓冲区填满有关。
我的问题是:除摩托罗拉外,其他设备也会出现这种情况吗?
(当然欢迎任何其他相关评论。)
从理论上讲,它可能取决于某些制造商特定的 HAL 实现等。所以我想知道我是否应该购买另一台设备来解决这个问题,因为谷歌/摩托罗拉的任何修复当然都需要一些时间.
这个测试应用。可以用来试试这个:
https://bitbucket.org/MarkusKauppinen/bleadvertisertest
如果一切顺利,它会很乐意一直做广告,如果这个问题再次出现,它会在几分钟左右显示一个对话框。如果您的设备根本不支持蓝牙 LE 广告或 BLE,它就会崩溃。 (这只是一个快速而简单的测试应用程序。)
重现此问题的另一种简单方法是从 https://github.com/devunwired/accessory-samples 运行“bluetoothadvertiser”应用程序然后快速点击 UI 上的“更新广告”按钮一会儿。
其他详细信息:
蓝牙 LE 外设模式支持(广告需要)已添加到 Lollipop 中,但在 4.x 中不可用。只有某些设备具有外设模式支持。兼容性至少涵盖在:
https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html Chipsets/Devices supporting Android 5 BLE peripheral mode chipsets supporting BLE peripheral role on Android 5
例如,这些设备应该支持:Motorola Moto E 4G (2015)、Motorola Moto G 4G(第 2 代)、Sony Xperia M4 Aqua、ZTE Blade S6、Motorola Moto X (2014)、Samsung Galaxy S6、谷歌 Nexus 6、谷歌 Nexus 9、HTC One M9、三星 Galaxy S6 Edge。
至于“肮脏的细节”,我总能在发生这种情况之前在 LogCat 中看到“GKI_Exception”:
GKI_exception(): 65524 getbuf: out of buffers
在第一个“GKI_Exception”之后不久,广告因 AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR 失败。这条线...
E/BtGatt.btif? ### ASSERT : external/bluetooth/bluedroid/main/../btif/src/btif_gatt_client.c line 803 Context transfer failed! (3) ###
...可能相关,但我不熟悉 BlueDroid。所说的断言在这里:
一些可能相关的问题:
https://code.google.com/p/android/issues/detail?id=65455 <-->-->
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Scanning large number of BLE Tags
Bluetooth Crash on Samsung S4
最佳答案
我在 Moto G 2nd Gen 上测试了您的应用,遇到了同样的问题。
我在运行 Android 6.0 的 Nexus 9 平板电脑上尝试过,我无法重现错误,但它似乎可以工作。同样在装有 Android 5.1.1 的 Nexus 播放器上,它似乎可以毫无问题地运行。 因此,这要么真的是 Moto G 的问题,要么 - 我认为更有可能 - Android 5.0.2 的错误已在更高版本中解决。
关于android - 循环启动和停止时蓝牙 LE 广告失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32656938/
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm