放胆眠 2024-01-22 17:22 采纳率: 33.3%
浏览 29
已结题

Android设备作为从机通过蓝牙HID和主机进行通信

开发一款Android APP,实现把Android手机作为HID设备,发送广播,等待主机端连接,连接成功后通过蓝牙HID服务通信。

目前尝试了两种方法:
第一种:
使用 BluetoothManager.openGattServer(MainActivity.this, mGattServerCallback)获取系统的蓝牙Gatt服务,然后配置一个UUID是“"00001812-0000-1000-8000-00805f9b34fb"”的BluetoothGattService,把这个Server添加到GattServer中。这样用nRF扫描连接后,能看到HID服务和特征,但是没法通信(用普通的UUID配置Service可以通信,但是用HID的UUID配置Service和特征就没法通信,咱也不知道为啥。。)
配置service如下图:
图1:

img


图2:

img

第二种方法:
使用bluetoothAdapter.getProfileProxy获取系统蓝牙配置代理,然后通过BluetoothHIDDevice这个类的接口registerApp把Android设备注册成HID设备。看回调里面返回的是true,应该是注册HID设备成功了?然后用另一台手机作为主机和我这个APP从机配对连接,连接上有外设(手柄的图标,但是我设置的是mouse啊)。然后用nRF连上之后发现这个设备下面没有HID的服务?
注册HID设备如下图:
图3:

img


图4:

img

醉了呀~研究几天没整明白要咋让设备通过HID服务和主机进行通信,有没有熟悉Android 蓝牙开发的朋友指导一下

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-22 17:23
    关注

    引自免费微信小程序:皆我百晓生

    我了解你的问题是如何使用Android设备作为从机通过蓝牙HID和主机进行通信。以下是一些建议和解决方案:

    1. 使用BluetoothGattServer来实现HID服务

      • 使用BluetoothGattServer类来创建和管理一个GATT服务器,并向其添加HID服务。你可以使用BluetoothGattService类来创建一个HID服务,并使用BluetoothGattCharacteristic类来创建特征值。
      • 确保你在创建特征值和描述符时使用正确的UUID。你提供的代码示例中,我注意到一些UUID的命名可能有误,请确保它们与标准HID UUID一致。
      • 你的HID服务应包含必要的特征值和描述符,例如键盘报告映射和HID信息。
      • 确保你的APP具有适当的权限来访问蓝牙服务和配置。
      • 建议在创建完整的GATT服务器之后,调用BluetoothGattServer.notifyCharacteristicChanged()方法来发送数据给主机。
    2. 检查Android设备的蓝牙规范

      • 确保你的Android设备支持蓝牙HID协议。不是所有设备都支持这一协议,因此你需要在设备规格或开发者文档中查找相关信息。
      • 查看设备的蓝牙芯片和操作系统版本,以确保它们符合蓝牙HID协议的要求。
    3. 修复代码错误和问题

      • 在你提供的代码中,有一些语法错误和命名错误。请仔细检查并进行修复,确保代码编译和运行正常。
      • 阅读蓝牙开发文档并查找类和方法的正确用法,以确保你正确配置了GATT服务器和HID设备。
    4. 使用专业的蓝牙库

      • 蓝牙开发可能会比较复杂,而且Android的蓝牙API也不是很友好。你可以考虑使用第三方蓝牙库,如AndroidBLELibrary或RxAndroidBle,它们提供了更简洁和易用的API来处理蓝牙通信。

    希望以上建议对你有所帮助。如果你需要更具体的代码示例或其他问题,请提供更详细的信息。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月30日
  • 创建了问题 1月22日

悬赏问题

  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓