BLE:使用 Android / iOS 读取长特征值

2024-04-29

对于正常的特征读取,仅读取 MTU 大小(20 字节)的数据。 我的客户将提供更大尺寸(超过 100 字节)的特征。

我看到 BLE 提供了“长读取”功能,可以读取直到达到特征的大小。 (https://bluegiga.zendesk.com/entries/25053373--REFERENCE-BLE-master-slave-GATT-client-server-and-data-RX-TX-basics https://bluegiga.zendesk.com/entries/25053373--REFERENCE-BLE-master-slave-GATT-client-server-and-data-RX-TX-basics)

attclient_read_long 命令 - 启动客户端首先向服务器发送正常读取请求的过程,如果服务器返回长度等于 BLE MTU(22 字节)的属性值,则客户端继续发送“读取长”请求直到读取属性的其余部分。这仅适用于您读取长度超过 22 字节的属性。为了简单起见,构建 GATT 服务器通常更简单,因此不存在长属性。请注意,BLE 协议仍然要求将数据打包成 max。 22字节块,因此使用“read long”并不能节省传输时间。

但是在 Android 中如何使用这个功能呢? BluetoothGatt 类仅提供一个简单的“Read()”——对于 iOS 来说也是如此。

增加 MTU 是不可能的,因为我们需要支持 AP 级别


我可以确认 iOS 会首先按照标准进行读取操作。然后,如果服务器返回一个完全填满的 PDU,那么 iOS 设备将继续执行 blob 读取操作。使用运行 iOS 11.2.x 的 iPhone 7 进行测试

对于长属性,您不需要多次调用peripheral.readValue(characteristic)。 CoreBluetooth 在幕后完成所有这些工作。

请参阅蓝牙规范核心 v5.0,特别是第 3 卷,F 部分“长属性值”。

实验证明上述。

我有一个 Android Thing 作为服务器,在读取操作期间我使用 iPhone 返回最大长度。 iOS 和我的 RPI3 交换的 MTU 为 185。因此读取响应的长度为 (MTU - 1) 184 字节。然后,服务器 (RPI) 接收偏移量为 184 的新读取请求,然后您可以返回更多数据。继续此操作,直到偏移量 > 512,或者最后读取的响应返回的长度小于 MTU - 1。

基于BluetoothGattServer 支持长属性的事实,我假设BluetoothGatt 对象也支持长属性。由于无法通过 API 设置要读取的偏移量,因此我假设您只能调用一次读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BLE:使用 Android / iOS 读取长特征值 的相关文章

  • 4 天后,应用仍未在 Google Play 搜索中编入索引

    我已经在 4 天前在 google play 上发布了我的第一个应用程序 语音到短信 但我仍然无法通过其名称或开发人员名称在搜索中找到我的应用程序 我只能通过包名称或真实应用程序名称 但不带空格 找到我的应用程序 VoiceToSMS 链接
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 以编程方式检测应用程序是否正在设备或模拟器上运行

    我想知道我的应用程序在运行时是在设备还是模拟器上运行 有没有办法检测到这一点 原因是用模拟器测试蓝牙 api http volcore limbicsoft com 2009 09 iphone os 31 gamekit pt 1 woo
  • 如何将 CIFilter 输出到相机视图?

    我刚刚开始使用 Objective C 我正在尝试创建一个简单的应用程序 它显示带有模糊效果的相机视图 我得到了与 AVFoundation 框架一起使用的相机输出 现在 我正在尝试连接 Core 图像框架 但不知道如何连接 Apple 文
  • 什么是 Android 测试协调器?

    谷歌最近发布了Android测试支持库1 0 读完后overview https android developers googleblog com 2017 07 android testing support library 10 is
  • FragmentActivity 无法解析为类型

    我正在尝试来自的应用程序这个博客 http android developers blogspot com 2011 02 android 30 fragments api html 在延长的同时FragmentActivity 我收到以下
  • Android:WebView/BaseInputConnection 中的退格键

    我在 Android 4 2 中遇到软键盘退格问题 我在 WebView CodeMirror 中有一个自定义编辑器 它使用一个空的
  • 如何在同一设备上运行的 Android 应用程序之间传输文件?

    我正在编写一个与 RESTful 服务交互的 Android 应用程序 该 Web 服务本质上是一个文件系统 并提供元数据以及对文件的 CRUD 访问 我的应用程序检索元数据 并通过ContentProvider 我需要添加与我的应用程序在
  • TableView 中图像的大小不正确

    我正在使用来自 URL 的图像创建一个表视图 但图像不会调整到所有视图的大小 直到我将其按入行中 知道为什么会发生这种情况吗 这是一个自定义的表格视图 我的代码是 UITableViewCell tableView UITableView
  • IOS 上图像的加密/解密

    我们正在使用加密 解密和 UIIMAGE 如果我们加密和解密 UIIMAge 而不保存到 iphone 画廊中 它工作正常 但如果我们加密 保存到画廊中 将 加密的图像 加载到应用程序中 然后解密它效果不好 我们使用这个函数来加密 解密 保
  • Android Google Map V2:如何在单击另一个标记时更改先前单击的标记的图标

    更新 我通过添加 previousMarker 对象解决了性能问题 因此 只有先前单击的标记将被删除并替换为默认图标 但是 当我单击标记时 信息窗口仍然不显示 我有一个地图视图并在上面设置了一些标记 我想要的是 当我单击一个标记时 它将其图
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 通过 Gradle 和 Android Studio 构建和运行应用程序比通过 Eclipse 慢

    我有一个多项目 10 个模块 每次构建大约需要 20 30 秒 当我在 Android Studio 中按 运行 时 每次都必须等待才能重建应用程序 这非常慢 是否可以在 Android Studio 中自动化构建过程 或者您对如何加快此过
  • ArraySlice 中的 Swift [重复]

    这个问题在这里已经有答案了 在数组上使用 prefix 方法后 我得到了所谓的 arraySlice 我怎样才能将其转换为数组 我试图从 FacebookGraphApi 获取 Ints 然后请求前 3 个 前缀 3 并尝试将它们添加到新数
  • TabLayout 的不同 tabMode

    我正在使用 ViewPager 和 TabLayout 如果选项卡可以放置在显示 tabMode 上 则它们必须是 app tabMode fixed else app tabMode scrollable 我怎样才能做到这一点 我不明白你
  • 如何在运行仅 iPhone 应用程序(非通用)的 iPad 上的 UIPickerView 中支持 VoiceOver?

    一般来说 我会查看 Apple 的 UICatalog 示例代码以获取基本的 VoiceOver 支持 但示例代码中似乎有对 UIPickerViews 的 VoiceOver 支持 我是否需要在某处提供accessibilityLabel
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C

随机推荐

  • UIViewController 中的 Xcode 5.1 UITableView - 自定义 TableViewCell 出口为零

    我有一个 UITableView 作为 UIViewController 中的子视图 我没有使用 UITableViewController 因为我有一些与 tableview 无关的其他内容占据了屏幕的一部分 我正在使用故事板 我将表视图
  • 公开 ASP.NET 用户控件中的复杂属性

    我想从自定义 ASP NET 用户控件公开一个复杂的属性 可以通过aspx页面中的控制标签来设置 像这样的事情 public class TestData public int X public int Y public partial c
  • 阅读 C 语言中的科学记数法

    我正在尝试读取包含以下内容的文件 1 0000000e 01 2 9265380e 03 5 0821200e 02 4 3231640e 01 2 0000000e 01 1 0170240e 04 9 2798610e 02 4 072
  • 无损连接属性

    关系模式中的无损连接属性是什么意思 是否能够在关系分解过程中保持信息 数据的语义 同时进行规范化 The 无损连接属性是归一化支持的分解特征 它能够确保原始关系的任何实例都可以从较小关系中的相应实例中识别出来
  • 消费者关闭了输入通道或发生错误。事件=0x8

    D AndroidRuntime 11752 D AndroidRuntime 11752 gt gt gt gt gt gt AndroidRuntime START com android internal os RuntimeInit
  • C# 检查闰年

    我想将输入日期 1 年添加到名为完成日期的列中 如果输入日期是闰年 我需要添加 364 天 如果不是 365 天的话 有没有办法在 c 中检查这一点 使用当前日期时间年份并操作闰年 不操作 然后添加天数 Thanks 您可以使用日期时间 I
  • getUserMedia 在 chrome 版本 48.0.2560.0 中无法工作,而在 46.0 中工作

    我的困惑是 我在我的页面中使用了 gerUSerMedia 该页面无法在我们的服务器上工作 而在某些机器上 在那些 chrome 浏览器中具有版本为 48 0 2560 0 的 chrome 时 它 将给出以下警告 getUserMedia
  • 从脚本加载调用 Angular 控制器

    我试图在从 onload 回调加载脚本后更新控制器的状态 我加载 Google 客户端 API 然后在 OnLoadCallback 中 我尝试手动引导 AngularJS 并将设置状态设置到我的控制器上 function OnLoadCa
  • Cypress Vue 组件测试从已挂载发出的事件

    我有一个 vue2 组件 它在其安装的生命周期挂钩中发出一个事件 该事件被发出 并且可以由使用该组件的页面处理 但是 我还想测试该事件是否在我的组件测试中发出 该测试使用赛普拉斯组件测试运行程序 这是一个精简版本 组件 TheCompone
  • Rails Heroku 应用程序错误

    我的项目在本地运行良好 我将它部署到 Heroku 我遇到了一些错误 应用程序无法在那里运行 我正在使用 Rails 4 和 postgresql 无法理解为什么会发生这种情况 在我看来 数据库没有创建 我应该在我的database yml
  • 从 C 调用带有字符串参数的 Go 函数?

    我可以从 C 调用一个没有参数的 Go 函数 按照下面的 https github com joeprivacy crefgo hello world 这通过编译go build和打印 Hello from Golang main func
  • 找不到全局类型 CallableFunction

    这是一个基本汇编脚本项目 但我在 tsconfig json 文件中遇到此错误消息 extends assemblyscript std assembly json include ts 这是我的 package json devDepen
  • 如何在 C++/CLI 中转发声明委托?

    How 以下内容无效 delegate MyDelegate ref class MyDelegate delegate void MyDelegate 申报工作如下 public delegate void MyDelegate Obje
  • Intent.ACTION_DIAL 号码以 # 结尾

    所以我尝试通过以下方式发送号码Intent ACTION DIAL以 结尾 例如 123 但是当Android Dialer应用程序启动时 只有 123 不见了 我正在使用以下代码来触发 Android 的拨号应用程序 Uri number
  • 如果文本框不为空,如何添加并显示工具提示文本框 WPF

    需要显示提示 其中包含文本字段中的数据 文本框有数据时出现提示 只需使用绑定到 ToolTipService 附加属性即可 XAML
  • API 27 中 startActivityForResult 后崩溃

    更新到 API 27 和支持库 27 0 2 后 我突然在 Crashlytics 中得到了很多这样的堆栈跟踪 Fatal Exception java lang IllegalArgumentException at android os
  • pip 安装与本地包具有相同命名空间的包

    我使用的是 Python 3 6 5 通过 miniconda 安装 我的问题是由于我正在安装一个与本地包具有相同命名空间的包 pip 安装此包后 我无法再从本地包导入 我收到一个ModuleNotFoundError错误 如果可能的话 命
  • 强制预先加载原本延迟加载的属性

    我有一个 Hibernate 对象 它的属性都是惰性加载的 大多数这些属性是其他 Hibernate 对象或 PersistentSet 现在我想强制 Hibernate 一次性加载这些属性 当然 我可以 触摸 这些属性中的每一个objec
  • 从 codeigniter 调用存储过程

    我正在使用将 mysqli 作为数据库驱动程序的 codeigniter 我试图从我的模型中调用一个简单的存储过程 但出现错误 我究竟做错了什么 Error Number 1064 You have an error in your SQL
  • BLE:使用 Android / iOS 读取长特征值

    对于正常的特征读取 仅读取 MTU 大小 20 字节 的数据 我的客户将提供更大尺寸 超过 100 字节 的特征 我看到 BLE 提供了 长读取 功能 可以读取直到达到特征的大小 https bluegiga zendesk com ent