快速接入

基本流程

对于有蓝牙接入需求的开发者,需要通过以下步骤完成蓝牙接入:

业务流程图

蓝牙调用流程图.png

调用示例

  1. //初始化
  2. my.openBluetoothAdapter({
  3. success: (res) => {
  4. console.log(res);
  5. }
  6. });
  7. //注册发现事件
  8. my.onBluetoothDeviceFound({
  9. success: (res) => {
  10. let device = res.devices[0];
  11. //连接发现的设备
  12. my.connectBLEDevice({
  13. deviceId: deviceId,
  14. success: (res) => {
  15. console.log(res)
  16. },
  17. fail:(res) => {
  18. },
  19. complete: (res)=>{
  20. }
  21. });
  22. //停止搜索
  23. my.stopBluetoothDevicesDiscovery({
  24. success: (res) => {
  25. console.log(res)
  26. },
  27. fail:(res) => {
  28. },
  29. complete: (res)=>{
  30. }
  31. });
  32. }
  33. });
  34. //注册连接事件
  35. my.onBLEConnectionStateChanged({
  36. success: (res) => {
  37. console.log(res);
  38. if (res.connected) {
  39. //开始读写notify等操作
  40. my.notifyBLECharacteristicValueChange({
  41. deviceId: deviceId,
  42. serviceId: serviceId,
  43. characteristicId: characteristicId,
  44. success: (res) => {
  45. console.log(res)
  46. },
  47. fail:(res) => {
  48. },
  49. complete: (res)=>{
  50. }
  51. });
  52. }
  53. }
  54. });
  55. //注册接收read或notify的数据
  56. my.onBLECharacteristicValueChange({
  57. success: (res) => {
  58. console.log(res);
  59. }
  60. });
  61. //开始搜索
  62. my.startBluetoothDevicesDiscovery({
  63. services: ['fff0'],
  64. success: (res) => {
  65. console.log(res)
  66. },
  67. fail:(res) => {
  68. },
  69. complete: (res)=>{
  70. }
  71. });
  72. //断开连接
  73. my.disconnectBLEDevice({
  74. deviceId: deviceId,
  75. success: (res) => {
  76. console.log(res)
  77. },
  78. fail:(res) => {
  79. },
  80. complete: (res)=>{
  81. }
  82. });
  83. //注销事件
  84. my.offBluetoothDeviceFound();
  85. my.offBLEConnectionStateChanged();
  86. my.offBLECharacteristicValueChange();
  87. //退出蓝牙模块
  88. my.closeBluetoothAdapter({
  89. success: (res) => {
  90. },
  91. fail:(res) => {
  92. },
  93. complete: (res)=>{
  94. }
  95. });

常见问题

  • 支持版本 android4.3以上支持ble
  • ios6以上都支持
  • deviceId,android取到的是蓝牙的mac地址(11:22:33:44:55:66),ios取到的是UUID(00000000-0000-0000-0000-000000000000这种格式)
  • 调startBluetoothDevicesDiscovery接口搜索不到设备,请确保设备发出了广播。如果接口中有传入services,请确保设备的广播内容中包含了service的UUID
  • 连接设备失败,请确认传入的deviceId是否正确,以及设备发出的信号是否足够强,在信号弱的时候可能会出现连接不上的情况
  • 写数据失败,查看传入的deviceId、serviceId、characteristicId格式是否正确,deviceId是否已连接上(onBLEConnectionStateChanged这个事件中可以监听连接状态变化,getConnectedBluetoothDevices这个方法可以拿到),确保是在连接状态下调写入方法,查看characteristicId是否属于这个service,以及这个特征值是否支持写
  • 读数据失败,同上,查看这个特征值是否支持读
  • 收不到数据通知,请确认调了notifyBLECharacteristicValueChange这个方法以及传入的参数是否正确,传入的characteristicId特征值是否支持notify或indicate,以及确认硬件是否发出了通知。注意调用notifyBLECharacteristicValueChange方法的以及注册onBluetoothDeviceFound事件的顺序,最好是在连接之后就调用notifyBLECharacteristicValueChange方法。
  • 事件回调多次调用,是由于多次匿名函数注册监听同一事件,因此建议每次调用on方法监听事件之前,先调用off方法,关闭之前的事件监听。

原文: https://docs.alipay.com/mini/api/bluetooth-intro