uni-app低功耗蓝牙在Android上的使用

uni-app低功耗蓝牙在Android上的使用

主要使用uniapp提供的低功耗蓝牙API进行hooks封装。
在使用时,注意Android版本必须5.1以上。


一.主要API初步封装(bluetooth.js)

1.1 初始化蓝牙模块(uni.openBluetoothAdapter(OBJECT))

该接口是使用低功耗蓝牙相关API必须调用的一个接口,若未先调用此接口,将会返回代码为10000的报错;

// 初始化蓝牙模块
export function initBluetooth() {
   
	return new Promise((resolve, reject) => {
   
		uni.openBluetoothAdapter({
   
			success(res) {
   
				console.log('初始化蓝牙成功', res);
				resolve(res)
			},
			fail(err) {
   
				console.log('初始化蓝牙失败', err);
				reject(err)
			}
		});
	});
}

注意:
在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用此接口会返回代码10001的错误,表示手机蓝牙功能不可用。

1.2 获取蓝牙适配器状态(uni.getBluetoothAdapterState(OBJECT))

// 获取蓝牙模块状态
export function getBluetoothAdapterState() {
   
	return new Promise((resolve, reject) => {
   
		uni.getBluetoothAdapterState({
   
			success: (res) => {
   
				console.log('获取本机蓝牙适配器状态', res);
				resolve(res)
			},
			fail(err) {
   
				console.log('获取本机蓝牙适配器状态', err);
				reject(err)
			}
		})
	});
}

返回数据

属性 类型 说明
discovering boolean 是否正在搜索设备
available boolean 蓝牙适配器是否可用

1.3 关闭蓝牙模块(uni.closeBluetoothAdapter(OBJECT))

调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 uni.openBluetoothAdapter 成对调用。

// 关闭蓝牙模块
export function closeBluetooth() {
   
	return new Promise((resolve, reject) => {
   
		uni.closeBluetoothAdapter({
   
			success(res) {
   
				console.log('关闭蓝牙成功', res);
				resolve(res)
			},
			fail(err) {
   
				console.log('关闭蓝牙失败', err);
				reject(err)
			}
		})
	})
}

1.4 开启搜索蓝牙设备(uni.startBluetoothDevicesDiscovery(OBJECT))

开始搜寻附近的蓝牙外围设备。此操作比较耗费系统资源,请在搜索并连接到设备后调用 uni.stopBluetoothDevicesDiscovery 方法停止搜索。

/**
 * 启动蓝牙设备搜索
 * @param {Object} params 参数
 */
export function startBluetoothSearch(params) {
   
	return new Promise((resolve, reject) => {
   
		uni.startBluetoothDevicesDiscovery({
   
			...params,
			success: (res) => {
   
				console.log('开启蓝牙搜索成功', res);
				resolve(res);
			},
			fail: (err) => {
   
				console.log('开启蓝牙搜索失败', err);
				reject(err);
			}
		})
	});
}

传入参数params说明(全都非必填)

属性 类型 默认值 说明
services Array<String> 要搜索的蓝牙设备主 service 的 uuid 列表。某些蓝牙设备会广播自己的主 service 的 uuid。如果设置此参数,则只搜索广播包有对应 uuid 的主服务的蓝牙设备。建议主要通过该参数过滤掉周边不需要处理的其他蓝牙设备。
allowDuplicatesKey boolean false 是否允许重复上报同一设备。如果允许重复上报,则 uni.onBlueToothDeviceFound 方法会多次上报同一设备,但是 RSSI 值会有不同。
interval number 0 上报设备的间隔。0 表示找到新设备立即上报,其他数值根据传入的间隔上报。
powerLevel string medium 扫描模式,越高扫描越快,也越耗电,仅安卓支持。low:低,medium:中,high:高。仅京东小程序支持

注意
App 端目前仅支持发现ble蓝牙设备

1.5 关闭搜索蓝牙设备(uni.stopBluetoothDevicesDiscovery(OBJECT))

停止搜寻附近的蓝牙外围设备。已经找到需要的蓝牙设备并不需要继续搜索时,调用该接口停止蓝牙搜索。

// 关闭蓝牙设备搜素
export function closeBluetoothSearch() {
   
	return new Promise((resolve, reject) => {
   
		uni.stopBluetoothDevicesDiscovery({
   
			success: (res) => {
   
				console.log('关闭蓝牙搜索成功', res);
				resolve(res);
			},
			fail: (err) => {
   
				console.log('关闭蓝牙搜索失败', err);
				reject(err);
			}
		});
	});
}

1.6 连接低功耗蓝牙设备(uni.createBLEConnection(OBJECT))

/**
 * 连接 BLE 设备
 * @param {String} deviceId 设备ID
 */
export function connectBleById(deviceId, timeout = 10000) {
   
	return new Promise((resolve, reject) => {
   
		uni.createBLEConnection({
   
			deviceId,
			timeout,
			success(res) {
   
				console.log('连接成功', res);
				resolve(res);
			},
			fail(err) {
   
				console.log('连接失败', err);
				resolve(err)
			}
		})
	})
}

传入参数params说明(除deviceId必填外,为非必填,且默认值为空)

属性 类型 说明
timeout number 超时时间,单位ms,不填表示不会超时,京东小程序不支持

注意

  • 若APP在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。
  • 请保证尽量成对的调用 createBLEConnection 和 closeBLEConnection 接口。安卓如果多次调用 createBLEConnection 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 closeBLEConnection 的时候并不能真正的断开与设备的连接。
  • 蓝牙连接随时可能断开,建议监听 uni.onBLEConnectionStateChange 回调事件,当蓝牙设备断开时按需执行重连操作。
  • 若对未连接的设备或已断开连接的设备调用数据读写操作的接口,会返回 10006 错误,建议进行重连操作。

1.7 断开低功耗设备蓝牙(uni.closeBLEConnection(OBJECT))

/**
 * 断开连接 BLE 设备
 * @param {String} deviceId 设备ID
 */
export function closeConnectBleById(deviceId) {
   
	return new Promise((resolve, reject) => {
   
		uni.closeBLEConnection({
   
			deviceId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值