当前位置: 首页 > 知识库问答 >
问题:

为什么on特征读取读取设置为读取特征的不同特征

公孙宗清
2023-03-14

我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。

我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下:

公共布尔值

(BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取请求的特征。

这是一个异步操作。读取操作的结果由BluetoothGattCallback#onCharacteristicRead回调报告。"

我为每个特征顺序调用readCharacteristic,并在请求下一个特征之前始终等待OnCraCharacteristicRead回调被执行。但在OnCraCharacteristicRead中,每次打开时,最终要读取的特征都是相同的(不一定是我在readCharacteristic上要求的特征)。

我在某个地方读到,我应该优先考虑特征。这是为什么?首先,为什么在readCharacteristic中有一个请求的特征输入,以及gatt如何引用它。

谢谢

编辑

经过进一步测试,我现在相信这是因为某种原因

#####################################################################################

在读取第一个请求(读取)特征后,回调被卡住,但通知特征持续激活,导致

onCharacteristicChanged回调重新启动-

我在onCharacteristicChanged回调期间禁用了通知,这会导致程序在第一次读取到后被卡住

#####################################################################################

所以程序永远不会离开onCharacteristicRead()回调。我尝试使用优先级队列,它最终只读取了两个(读取)特征一次,但再次陷入困境,并且从未离开onCharacteristicRead回调。令人沮丧的。有什么想法吗?

共有1个答案

贾越
2023-03-14

我的简单方法是使用倒计时锁存器。我调用一个值为1的倒计时锁存器(倒计时一次)。然后我称之为阅读特征。然后我等待倒计时(wait()方法)。在Bluetooth GattCallback onCharacteristicRead中,执行倒计时,等待函数将返回。然后你可以阅读结果。

一个接一个地做这个特征。我发现在尝试另一个读取之前,我必须等待回调信号发出。

比如:

 countDownLatch = new CountDownLatch(1)
 BluetoothGatt.readCharacteristic(your characteristic)
 if (countDownLatch.await(3, TimeUnit.SECONDS))  this blocks for at least 3 seconds
    // if true no timeout
     the characteristic value now has the read value.

在回调中

 onCharacteristicRead()
 countDownLatch.count(); // Counts down 1 - this will cause the await method to return.

那只是记忆中的一个草图。显然,必须知道两个线程之间的倒计时闩锁对象。您需要在“await()”方法上处理中断的异常。

 类似资料:
  • 1 介绍   词频-逆文档频率法(Term frequency-inverse document frequency,TF-IDF)是在文本挖掘中广泛使用的特征向量化方法。 它反映语料中词对文档的重要程度。假设用t表示词,d表示文档,D表示语料。词频TF(t,d)表示词t在文档d中出现的次数。文档频率DF(t,D)表示语料中出现词t的文档的个数。 如果我们仅仅用词频去衡量重要程度,这很容易过分强调

  • 我在使用蓝牙低能Qt api读取特性时遇到问题。我正在使用的设备是Decawave DWM1001模块。我在遵循文档中的教程。我成功地连接到设备,读取并创建了它的服务。该设备具有UUID为680c21d9-c946-4c1f-9c11-baa1c21329e7的“网络节点服务”,我正在尝试从中读取特征。我调用QLowEnergyController::connectToDevice()方法,它找到

  •   CountVectorizer和CountVectorizerModel的目的是帮助我们将文本文档集转换为词频(token counts)向量。 当事先没有可用的词典时,CountVectorizer可以被当做一个Estimator去抽取词汇,并且生成CountVectorizerModel。 这个模型通过词汇集为文档生成一个稀疏的表示,这个表示可以作为其它算法的输入,比如LDA。   在训练

  •   Word2Vector将词转换成分布式向量。分布式表示的主要优势是相似的词在向量空间距离较近,这使我们更容易泛化新的模式并且使模型估计更加健壮。 分布式的向量表示在许多自然语言处理应用(如命名实体识别、消歧、词法分析、机器翻译)中非常有用。 1 模型   在MLlib中,Word2Vector使用skip-gram模型来实现。skip-gram的训练目标是学习词向量表示,这个表示可以很好的预测

  • Spark特征提取(Extracting)的3种算法(TF-IDF、Word2Vec以及CountVectorizer)结合Demo进行一下理解 TF-IDF算法介绍: 词频-逆向文件频率(TF-IDF)是一种在文本挖掘中广泛使用的特征向量化方法,它可以体现一个文档中词语在语料库中的重要程度。 词语由t表示,文档由d表示,语料库由D表示。词频TF(t,,d)是词语t在文档d中出现的次数。文件频率D

  • 校验者: @if only 翻译者: @片刻 模块 sklearn.feature_extraction 可用于提取符合机器学习算法支持的特征,比如文本和图片。 Note 特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征。后者是将这些特征应用到机器学习中。 4.2.1. 从字典类型加载特征 类 DictVectorizer 可用于将标准的Py