b12.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. class BluetoothTools {
  2. constructor() {
  3. this.decimalData = []; //获取buffer之前的二进制数据集合;
  4. this.deviceId = null;
  5. this.initStatus = 0; //蓝牙初始化结果;0:初始化中,1-成功;2-失败;
  6. this.linked = false; //蓝牙是否为连接状态;
  7. this.connectChangeHandler = null;
  8. }
  9. // 初始化;
  10. init(connectChangeHandler) {
  11. this.connectChangeHandler = connectChangeHandler;
  12. return new Promise((resolve, reject) => {
  13. uni.openBluetoothAdapter({
  14. success: res => {
  15. this.initStatus = 1;
  16. this.onConnectChange(connectChangeHandler)
  17. resolve(res)
  18. },
  19. fail: err => {
  20. this.initStatus = 2;
  21. console.log('蓝牙初始化失败:', err);
  22. this.toast('蓝牙不可用!')
  23. reject(err)
  24. }
  25. })
  26. })
  27. }
  28. // 获取蓝牙状态,是否可用
  29. checkCanUse() {
  30. return new Promise((resolve, reject) => {
  31. uni.getBluetoothAdapterState({
  32. success: res => {
  33. // console.log(res);
  34. resolve(res)
  35. },
  36. fail: err => {
  37. // console.log(err);
  38. reject(err)
  39. }
  40. })
  41. })
  42. }
  43. // 开始搜索蓝牙
  44. startSearch(cb) {
  45. return new Promise(async (resolve, reject) => {
  46. // if (this.initStatus === 2) {
  47. // this.toast('蓝牙初始化失败!');
  48. // reject();
  49. // return false;
  50. // } else if (this.initStatus === 0) {
  51. // this.toast('蓝牙未初始化!');
  52. // reject();
  53. // return false;
  54. // }
  55. if (this.initStatus !== 1) {
  56. await this.init(this.connectChangeHandler);
  57. }
  58. this.onFound(cb);
  59. uni.startBluetoothDevicesDiscovery({
  60. allowDuplicatesKey: false,
  61. services: [],
  62. success: (res) => {
  63. // console.log('开始搜索蓝牙设备!', res);
  64. resolve(res)
  65. },
  66. fail: err => {
  67. // console.log('开启搜索失败:', err);
  68. this.toast('开始搜索失败!')
  69. reject(err)
  70. }
  71. })
  72. })
  73. }
  74. // 监听单一设备搜索结果
  75. onFound(cb) {
  76. uni.onBluetoothDeviceFound(res => {
  77. // console.log('蓝牙设备:', res.devices);
  78. cb(res.devices)
  79. })
  80. }
  81. // 停止搜索;
  82. stopSearch() {
  83. return new Promise((resolve, reject) => {
  84. uni.stopBluetoothDevicesDiscovery({
  85. success: (res) => {
  86. resolve(res)
  87. },
  88. fail: (err) => {
  89. // this.toast('蓝牙停止搜索失败,请重试!');
  90. console.log('蓝牙停止搜索失败:', err);
  91. reject(err)
  92. }
  93. })
  94. })
  95. }
  96. // 关闭蓝牙模块(打印完后调用)
  97. closeAdapter() {
  98. return new Promise((resolve, reject) => {
  99. uni.closeBluetoothAdapter({
  100. success: res => {
  101. resolve(res);
  102. },
  103. fail: (err) => {
  104. console.log('关闭失败:', err);
  105. // this.toast('蓝牙模块关闭失败!')
  106. reject(err);
  107. }
  108. })
  109. })
  110. }
  111. toast(msg) {
  112. uni.showToast({
  113. title: msg,
  114. icon: 'none',
  115. duration: 2200
  116. })
  117. }
  118. // 根据deviceId连接蓝牙;
  119. connectBLE(deviceId) {
  120. return new Promise(async (resolve, reject) => {
  121. if (this.initStatus !== 1) {
  122. await this.init(this.connectChangeHandler).catch(err => {
  123. reject(err)
  124. });
  125. }
  126. this.checkCanUse().then(async data => {
  127. // console.log(data);
  128. if (data.available) {
  129. uni.createBLEConnection({
  130. deviceId: deviceId,
  131. success: (res) => {
  132. resolve(res)
  133. },
  134. fail: err => {
  135. console.log('蓝牙连接失败!', err);
  136. this.toast('蓝牙连接失败,请重试!')
  137. reject(err)
  138. }
  139. })
  140. } else {
  141. this.toast('蓝牙不可用')
  142. reject()
  143. }
  144. }).catch(err => {
  145. this.toast('蓝牙不可用!!')
  146. reject()
  147. })
  148. })
  149. }
  150. // 根据deviceId断开蓝牙链接;
  151. closeBLE(deviceId) {
  152. return new Promise((resolve, reject) => {
  153. if (!deviceId) {
  154. resolve();
  155. return;
  156. }
  157. uni.closeBLEConnection({
  158. deviceId: deviceId,
  159. success: (res) => {
  160. // console.log('蓝牙已断开!', res);
  161. resolve(res)
  162. },
  163. fail: err => {
  164. console.log('蓝牙断开失败!', err);
  165. // this.toast('蓝牙断开失败, 请重试!')
  166. reject(err)
  167. }
  168. })
  169. })
  170. }
  171. // 监听蓝牙连接状态;
  172. onConnectChange(cb) {
  173. uni.onBLEConnectionStateChange(res => {
  174. console.log('监听蓝牙连接状态:', res);
  175. if (res.connected) {
  176. this.linked = true;
  177. this.deviceId = res.deviceId;
  178. } else {
  179. this.linked = false;
  180. this.deviceId = null;
  181. }
  182. cb(res);
  183. })
  184. }
  185. }
  186. export default BluetoothTools;