123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- class BluetoothTools {
- constructor() {
- this.decimalData = []; //获取buffer之前的二进制数据集合;
- this.deviceId = null;
- this.initStatus = 0; //蓝牙初始化结果;0:初始化中,1-成功;2-失败;
- this.linked = false; //蓝牙是否为连接状态;
- this.connectChangeHandler = null;
- }
-
- // 初始化;
- init(connectChangeHandler) {
- this.connectChangeHandler = connectChangeHandler;
- return new Promise((resolve, reject) => {
- uni.openBluetoothAdapter({
- success: res => {
- this.initStatus = 1;
- this.onConnectChange(connectChangeHandler)
- resolve(res)
- },
- fail: err => {
- this.initStatus = 2;
- console.log('蓝牙初始化失败:', err);
- this.toast('蓝牙不可用!')
- reject(err)
- }
- })
- })
- }
- // 获取蓝牙状态,是否可用
- checkCanUse() {
- return new Promise((resolve, reject) => {
- uni.getBluetoothAdapterState({
- success: res => {
- // console.log(res);
- resolve(res)
- },
- fail: err => {
- // console.log(err);
- reject(err)
- }
- })
- })
- }
- // 开始搜索蓝牙
- startSearch(cb) {
- return new Promise(async (resolve, reject) => {
- // if (this.initStatus === 2) {
- // this.toast('蓝牙初始化失败!');
- // reject();
- // return false;
- // } else if (this.initStatus === 0) {
- // this.toast('蓝牙未初始化!');
- // reject();
- // return false;
- // }
- if (this.initStatus !== 1) {
- await this.init(this.connectChangeHandler);
- }
- this.onFound(cb);
- uni.startBluetoothDevicesDiscovery({
- allowDuplicatesKey: false,
- services: [],
- success: (res) => {
- // console.log('开始搜索蓝牙设备!', res);
- resolve(res)
- },
- fail: err => {
- // console.log('开启搜索失败:', err);
- this.toast('开始搜索失败!')
- reject(err)
- }
- })
- })
- }
- // 监听单一设备搜索结果
- onFound(cb) {
- uni.onBluetoothDeviceFound(res => {
- // console.log('蓝牙设备:', res.devices);
- cb(res.devices)
- })
- }
-
- // 停止搜索;
- stopSearch() {
- return new Promise((resolve, reject) => {
- uni.stopBluetoothDevicesDiscovery({
- success: (res) => {
- resolve(res)
- },
- fail: (err) => {
- // this.toast('蓝牙停止搜索失败,请重试!');
- console.log('蓝牙停止搜索失败:', err);
- reject(err)
- }
- })
- })
- }
- // 关闭蓝牙模块(打印完后调用)
- closeAdapter() {
- return new Promise((resolve, reject) => {
- uni.closeBluetoothAdapter({
- success: res => {
- resolve(res);
- },
- fail: (err) => {
- console.log('关闭失败:', err);
- // this.toast('蓝牙模块关闭失败!')
- reject(err);
- }
- })
- })
- }
- toast(msg) {
- uni.showToast({
- title: msg,
- icon: 'none',
- duration: 2200
- })
- }
- // 根据deviceId连接蓝牙;
- connectBLE(deviceId) {
- return new Promise(async (resolve, reject) => {
- if (this.initStatus !== 1) {
- await this.init(this.connectChangeHandler).catch(err => {
- reject(err)
- });
- }
- this.checkCanUse().then(async data => {
- // console.log(data);
- if (data.available) {
- uni.createBLEConnection({
- deviceId: deviceId,
- success: (res) => {
- resolve(res)
- },
- fail: err => {
- console.log('蓝牙连接失败!', err);
- this.toast('蓝牙连接失败,请重试!')
- reject(err)
- }
- })
- } else {
- this.toast('蓝牙不可用')
- reject()
- }
- }).catch(err => {
- this.toast('蓝牙不可用!!')
- reject()
- })
- })
- }
- // 根据deviceId断开蓝牙链接;
- closeBLE(deviceId) {
- return new Promise((resolve, reject) => {
- if (!deviceId) {
- resolve();
- return;
- }
- uni.closeBLEConnection({
- deviceId: deviceId,
- success: (res) => {
- // console.log('蓝牙已断开!', res);
- resolve(res)
- },
- fail: err => {
- console.log('蓝牙断开失败!', err);
- // this.toast('蓝牙断开失败, 请重试!')
- reject(err)
- }
- })
- })
- }
- // 监听蓝牙连接状态;
- onConnectChange(cb) {
- uni.onBLEConnectionStateChange(res => {
- console.log('监听蓝牙连接状态:', res);
- if (res.connected) {
- this.linked = true;
- this.deviceId = res.deviceId;
- } else {
- this.linked = false;
- this.deviceId = null;
- }
- cb(res);
- })
- }
- }
- export default BluetoothTools;
|