我正在尝试编写一个可访问 Zephyr HxM 智能心脏监护仪的蓝牙 LE 应用程序。该显示器有多项蓝牙服务,但我对电池服务、心率服务以及具有 Activity 和峰值加速度的自定义服务感兴趣。每一个都有一个特性,电池电量 (BAT)、心率测量 (HR) 和自定义测量 (CUS)。 HxM 大约每秒更新一次。
我正在使用装有 Android 4.4 的 Galaxy S4 执行此操作。
它没有按照文档中的预期工作。
我最初的做法是:
Read BAT
Set notification for HR
Set notification for CUS.
然后等待回调。设置通知即调用
BluetoothGatt.setCharacteristicNotification(Characteristic char , boolean enabled)
(也可以为 BAT 做通知,但是,规范不要求支持它。但是,HxM 确实支持它。)
这没有用。我收到了 BAT 和 HR 通知,但没有收到 CUS。如果我取消了第二步,我会收到 CUS 的通知。我不能两者兼得。 (这表明我正在正确阅读这些特征,所以这 [可能] 不是问题所在。)
我发现一些迹象表明 Android 的蓝牙堆栈同步存在问题,但没有硬性文档。然后我尝试了以下操作:
Read BAT.
Wait for the BAT reading, then set notification for HR,
Get HR, then disable notification for HR, and start notification for CUS.
Get CUS, then disable notification for CUS, and start notification for HR.
And continue to loop.
我得到了 BAT,仅此而已。
通过反复试验,我发现了以下工作:
Read BAT.
Wait for the BAT reading, then set notification for HR,
Get HR, then start notification for CUS.
Get CUS, then start notification for HR.
And continue to loop.
(与上述相同,但没有禁用通知。)通常,我会在 200 毫秒内获得 HR 读数,然后是 CUS 读数。可以假设它们来自同一更新。 (数据中没有时间戳,必须保持较短才能成为 LE。)实际上,逻辑更复杂,因为计时器是必要的,以防万一预期的读数没有进来。这个逻辑要复杂得多(并且比我的第一次尝试更容易出错),这就是文档似乎说的是什么是合适的。
我已经联系了 Zephyr,他们说 HxM Smart 已经在 Windows 上进行了广泛的测试,并且会按照它应该的方式进行同步通知。还有迹象表明它可以在 iOS 上正常工作。
还有一个问题我不明白。为了获得通知,您必须在本地启用 Characteristics 以便通过以下方式进行通知:
BluetoothGattDescriptor descriptor = characteristic
.getDescriptor(UUID_CLIENT_CHARACTERISTIC_CONFIG);
resSet = descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
resWrite = mBluetoothGatt.writeDescriptor(descriptor);
这是针对每个特征的设置,应该只需要在首次收到特征时执行一次。相反,我发现每次设置通知时都必须这样做。这可能只会导致足够的时间延迟才能正常工作。我不知道。这种反复试验占用了我很多时间。如果能明确说明其工作原理,那就太好了。
我应该注意,对于所有返回结果的调用,结果为真(成功)。
对于冗长的声明,我深表歉意。我的问题是:
我找不到任何文档说明我必须执行所描述的事情。所有迹象表明您设置了通知并等待回调。 是否有文档,或者这是一个错误,或者只是一个错误的实现?(或者这是我的错误?)我特别想知道我必须做的事情的文档在哪里。
其次,还有一个更复杂的问题。我试图调试例程以查看代码实际在做什么。当我到达 BluetoothGatt.class 时,源代码行与调试堆栈所说的不匹配。因此我假设 S4 没有使用标准的 Android。我不知道从那里去哪里。这一直令人沮丧,虽然我有一些看起来可以工作的东西,但它很笨拙,而且几乎肯定不那么健壮。
感谢您的帮助。
最佳答案
我在按顺序写入多个值时遇到了同样的问题,在它们之间放置一个 Thread.sleep(200) 解决了这个问题(唉,我应该说)。也许这也有助于获取通知。 在 Nexus 5 上的 android 4.4.2 上测试了这个。不,4.4 并不能解决所有问题......
关于android - Android 蓝牙 LE 通知的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342631/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加