开发基于uni-app的蓝牙BLE接口对接蓝牙打印碰到的现象记录

原创文章,转载请写明转载地址:https://blog.youkuaiyun.com/michelsn/article/details/88232476

 

开发环境:HBuilderX + uni-app

蓝牙打印机:驰腾PD36 和 GPrinter佳博GP-Q80

Andorid环境下打印没什么问题,主要描述下IOS环境下的情况

-----------------------------------------------------------------------------------

问题描述:先搜索蓝牙设备,并把搜索到的蓝牙设备记录下来,然后关闭重启APP,选择之前搜索到的蓝牙设备DeviceID,点击连接并打印,结果会出现 no device 错误;

解决方案:每一次执行uni.openBluetoothAdapter后,都需要去执行uni.startBluetoothDevicesDiscovery,搜索到之前记录的蓝牙设备,然后再根据DeviceID去连接蓝牙设备即可。

-----------------------------------------------------------------------------------

以下贴出这几天研究APP对接蓝牙打印的代码,希望可以帮助有需要的朋友,少经历点坑。

	sendDataToBLE: function(deviceId, serviceId, characteristicId, msg, callbackIfFinish) {

		function encode_utf8(s) {
			return unescape(encodeURIComponent(s));
		}

		function str2ab(str) {
			var s = encode_utf8(str);
			var buf = new ArrayBuffer(s.length);
			var bufView = new Uint8Array(buf);
			for (var i = 0, strLen = s.length; i < strLen; i++) {
				bufView[i] = s.charCodeAt(i);
			}
			return bufView;
		}

		function split_array(arr, len) {
			var a_len = arr.length;
			var result = []
			for (var i = 0; i < a_len; i += len) {
				result.push(arr.slice(i, i + len))
			}
			return result;
		}
		//var uint8Buf = str2ab(msg);		
		var uint8Array = new textencoding.TextEncoder("gb2312", {
			NONSTANDARD_allowLegacyEncoding: true
		}).encode(msg);
		var uint8Buf = Array.from(uint8Array);
		//拆分数组 每20个元素组成一个新数组 
		var sendloop = split_array(uint8Buf, 20);

		function realWriteData(sendloop, i) {
			if (i >= sendloop.length) {
				if (callbackIfFinish) {
					callbackIfFinish(1, "");
				}
				return;
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值