Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 蓝牙低能量并不总能捕捉到onCharacteristicChanged_Android_Bluetooth Lowenergy - Fatal编程技术网

Android 蓝牙低能量并不总能捕捉到onCharacteristicChanged

Android 蓝牙低能量并不总能捕捉到onCharacteristicChanged,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我有一个问题,我不知道如何解决它 我可以成功连接到设备,注册以获取有关某个特性的通知,并且可以在远程设备上的值更改后成功收到通知 我遇到的问题是,当连续的通知到达时,第二个通知并不总是被服务甚至操作系统捕获,因为我只在第一次看到这个事件: 2139-2398/? D/BtGatt.btif﹕ btgattc_handle_event:Event 1013 2139-2398/? D/BtGatt.btif﹕btif_gattc_upstreams_evt: Event 10 我不想这么说

我有一个问题,我不知道如何解决它

我可以成功连接到设备,注册以获取有关某个特性的通知,并且可以在远程设备上的值更改后成功收到通知

我遇到的问题是,当连续的通知到达时,第二个通知并不总是被服务甚至操作系统捕获,因为我只在第一次看到这个事件:

 2139-2398/? D/BtGatt.btif﹕ btgattc_handle_event:Event 1013 
 2139-2398/? D/BtGatt.btif﹕btif_gattc_upstreams_evt: Event 10
我不想这么说,但它在iPhone5上运行得非常好

更奇怪的是,它适用于我的三星S4,但不适用于Nexus5、S3或Xperia T。 但是,这似乎取决于onCharacteristicChanged方法所做的工作量(完成所有工作大约需要100ms或更短时间)。 所以我想知道在ble服务中是否有一些事情需要避免

我现在唯一的线索,是改变通知指示,但我不能开始做这项工作,如果不确定这将解决问题,因为大量的工作,它


我不明白为什么操作系统不能捕捉到这个事件。

这正是我在发布这个问题后所尝试的。因此,我将所有工作都放在一个新的处理程序(Looper.getMainLooper()).post(newrunnable(){…})中。但结果完全一样。。。我可能已经找到了我的服务在N5/Xperia t上无法正常工作的原因。我猜这是因为一旦我注册到适当的特征以接收通知,嵌入的ble模块就会向我发送通知,我立即在特征中写入了一些值。但结果是我注册所有想要的特性的过程还没有完成,而且我从未收到onCharacteristicWrite()回调。由于我延迟了writeCharacteristic方法,所以一切都无法正常工作。我没有解释为什么我以前只收到一份通知。。。它在S4上工作,因为在第一次通知时,S4上的工作量更为重要。希望这能帮助其他人。ble开发者的社区并没有那么大,谷歌并不认为ble很重要,我发现。。。希望未来一切都会改变


更新:一个更好的解决方案是注册您知道会收到通知的特性,首先是在所有需要的特性末尾注册它。

100ms是回调中需要做的大量工作。尝试只捕获必要的数据并发布到另一个线程上。