找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索本站精品资源

首页 教程频道 小程序开发 查看内容

熊晨沣蓝牙实战--小程序蓝牙连接2.0

作者:模板之家 2018-1-2 08:59 1062人关注

微信小程序蓝牙连接2.0说明: 1、本版本区分了ANDROID和IOS系统下蓝牙连接的不同方式。 2、兼容了更多情况下的链接包括: (1)未开启设备蓝牙,当监听到开启了蓝牙后自动开始连接。

微信小程序蓝牙连接2.0说明:

1、本版本区分了ANDROID和IOS系统下蓝牙连接的不同方式。 
2、兼容了更多情况下的链接包括:

(1)未开启设备蓝牙,当监听到开启了蓝牙后自动开始连接。 
(2)初始化蓝牙失败后每3000ms自动重新初始化蓝牙适配器。 
(3)安卓端开启蓝牙适配器扫描失败,每3000ms自动重新开启。 
(4)IOS端获取已连接蓝牙设备为空,每3000ms自动重新获取。 
(5)安卓端蓝牙开始链接后中断扫描,连接失败了,重新开始扫描。 
(6)IOS端开始连接设备后,停止获取已连接设备,连接失败自动重新开启获取。 
(7)连接成功后,关闭系统蓝牙,蓝牙适配器重置。 
(8)连接成功后,关闭系统蓝牙,再次打开蓝牙,自动重新开始连接。 
(9)连接成功后,关闭目标蓝牙设备,自动重新开始扫描(获取)。 
(10)连接成功后,最小化小程序(连接未中断),打开小程序显示已连接。 
(11)连接成功后,杀掉小程序进程,连接关闭,自动重新开始扫描(获取)。

3、想起来了再来更新....。 
4、流程图,明天或后天或...谁有空帮我画一下也行。

我的连接是在App.js中做的。 
在App.js中的onLaunch触发是调用 init()方法。 
init代码:

 

  1. init: function (n) {
  2.  
  3. this.list = [];
  4.  
  5. this.serviceId = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
  6.  
  7. this.serviceId_2 = "00001803-0000-1000-8000-00805F9B34FB";
  8.  
  9. this.serviceId_3 = "00001814-0000-1000-8000-00805F9B34FB";
  10.  
  11. this.serviceId_4 = "00001802-0000-1000-8000-00805F9B34FB";
  12.  
  13. this.serviceId_5 = "00001804-0000-1000-8000-00805F9B34FB";
  14.  
  15. this.serviceId_6 = "00001535-1212-EFDE-1523-785FEABCD123";
  16.  
  17. this.characterId_write = "6E400042-B5A3-F393-E0A9-E50E24DCCA9E";
  18.  
  19. this.characterId_read = "6E400012-B5A3-F393-E0A9-E50E24DCCA9E";
  20.  
  21. this.connectDeviceIndex = 0;
  22.  
  23. this.isGettingConnected = false;
  24.  
  25. this.isDiscovering = false;
  26.  
  27. this.isConnecting = false;
  28.  
  29. this.connectedDevice = {};
  30.  
  31. console.log('init state', this.connectedDevice.state);
  32.  
  33. if (!this.connectedDevice.state || n == 200) {
  34.  
  35. this.connectedDevice.state = false;
  36.  
  37. this.connectedDevice.deviceId = '';
  38.  
  39. this.adapterHasInit = false
  40.  
  41. }
  42.  
  43. this.startConnect();
  44.  
  45. }
 

说明:

1、 serviceId_2~6 是我已知的想要连接的蓝牙设备的serviceId可以只写一个。  2、characterId_write 是我已知的想要连接的蓝牙设备写入数据的特征值。  3、characterId_read是我已知的想要连接的蓝牙设备读取数据的特征值。  (以上3个都是为了做比对,真实的操作按照获取到的sericeid, characterid为准)。  4、connectedDevice 是已连接了的设备信息对象。

init完成后开始调用连接 startConnect();

 

startConnect代码:

 

  1. startConnect: function () {
  2.  
  3. var that = this;
  4.  
  5. if (that.connectedDevice.state) return;
  6.  
  7. that.connectedDevice.deviceId = "";
  8.  
  9. that.connectedDevice.state = false;
  10.  
  11. // 如果适配器已经初始化不在调用初始化(重复初始化会报错)
  12.  
  13. if (this.adapterHasInit == undefined || this.adapterHasInit) return;
  14.  
  15. wx.showLoading({
  16.  
  17. title: '初始化蓝牙',
  18.  
  19. duration: 2000
  20.  
  21. });
  22.  
  23. // 开启蓝牙适配器状态监听
  24.  
  25. this.listenAdapterStateChange();
  26.  
  27. // 初始化蓝牙适配器状态(必须步骤,否则无法进行后续的任何操作)
  28.  
  29. wx.openBluetoothAdapter({
  30.  
  31. success: function (res) {
  32.  
  33. console.log("初始化蓝牙适配器成功");
  34.  
  35. that.getBluetoothAdapterState();
  36.  
  37. that.adapterHasInit = true;
  38.  
  39. },
  40.  
  41. fail: function (err) {
  42.  
  43. console.log(err);
  44.  
  45. wx.showLoading({
  46.  
  47. title: '请开蓝牙',
  48.  
  49. icon: 'loading',
  50.  
  51. duration: 2000
  52.  
  53. })
  54.  
  55. }
  56.  
  57. });
  58.  
  59. }

说明:这段有注释,就不多说了,比较简单。

在初始化蓝牙适配器状态成功后调用getBluetoothAdapterState()方法。

 

getBluetoothAdapterState代码:

 

  1. getBluetoothAdapterState: function () {
  2.  
  3. var that = this;
  4.  
  5. wx.getBluetoothAdapterState({
  6.  
  7. success: function (res) {
  8.  
  9. console.log(res);
  10.  
  11. var available = res

路过

雷人

握手

鲜花

鸡蛋
原作者: 模板之家 来自: 网络收集

全部回复(0)