uni-app开发经验分享十五: uni-app 蓝牙打印功能
最近在做uni-app项目时,遇到了需要蓝牙打印文件的功能需要制作,在网上找到了一个教程,这里分享给大家。
引入tsc.js
简单得引入到自己所需要得页面中去,本次我们只要到了标签模式,他同时还有账单模式可以选择。
// 蓝牙打印 指令和转码var tsc = require('@components/gprint/tsc.js')
蓝牙适配前期工作
首先我们需要先初始化蓝牙模块,在进行搜索蓝牙。在监听到附近蓝牙设备时,记录他的名称和deviceId。
onBlue(e) {uni.openBluetoothAdapter({success(res) {//监听寻找到新设备的事件that.findDevice()//监听本机蓝牙适配器状态变化事件that.onStatus()}})
findDevice(){console.log("监听寻找到新设备的事件---------------")//监听寻找到新设备的事件uni.onBluetoothDeviceFound(function(devices) {const {name,deviceId} = devices[0];if(name == "未知设备")return;if(!name || !name.length){that.devices.push({name: name,deviceId: deviceId,services: []})}that.devices.forEach(e=>{if(that.devicesList){let b = true;that.devicesList.forEach(e1=>{if(e.name == e1.name){b = false;}});if(b)that.devicesList.push(e);}else{that.devicesList.push(e);}});}
}
onStatus(){uni.getBluetoothAdapterState({success: function(res) {//本机蓝牙开启时if (res.available) {//如在正在搜索设备,则停止搜索if (res.discovering) {uni.stopBluetoothDevicesDiscovery()}//搜索蓝牙//开始搜寻附近的蓝牙外围设备uni.startBluetoothDevicesDiscovery()} else {console.log('本机蓝牙不可用')}},})
}
连接蓝牙
搜索出附近蓝牙设备后,获取蓝牙设备的deviceId传入createBLEConnection方法中。在连接蓝牙设备时,我们需要注意的是保证尽量成对的调用 createBLEConnection 和 closeBLEConnection 接口。安卓如果多次调用 createBLEConnection 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 closeBLEConnection 的时候并不能真正的断开与设备的连接。
我们将连接成功的蓝牙信息存到currDev中,以便直接连接,无需进行搜索操作。
onLink(item){const {deviceId} = item;console.log("连接蓝牙---------------" + deviceId);//连接低功耗蓝牙设备。uni.createBLEConnection({deviceId: deviceId,complete(res) {if (res.errMsg != "createBLEConnection:ok") return//连接设备时,需断开本机连接设备uni.closeBLEConnection({deviceId})that.connId = deviceId;that.currDev = itemsetTimeout(()=> {//获取蓝牙设备所有服务(service)that.getBLEServices(deviceId)}, 2000)}//连接成功 关闭搜索uni.stopBluetoothDevicesDiscovery()})
}
getBLEServices(deviceId) {uni.getBLEDeviceServices({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: deviceId,complete(res) {const {services} = res;services.forEach(item=>{const {uuid} = item;uni.getBLEDeviceCharacteristics({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId: uuid,success(res) {const {characteristics} = res;for(let block of characteristics){if(!block.properties.write)returnfor (let index in that.devices) {if (that.devices[index].deviceId == deviceId) {that.devices[index].services.push({serviceId: uuid,characteristicId: block.uuid,})break}}}uni.setStorage({key: 'currDev',data: that.devices,});}})})}})
}
打印
打印格式需要自己根据当前设备的格式来进行设置打印。本章用到的是tsc.js中的form格式。
onPrint(){if(this.currDev.length == 0){uni.showToast({title: '请先连接蓝牙打印机',duration: 2000});return}//标签模式const {deviceId} = this.currDev;const {serviceId,characteristicId} = this.currDev.services[0];var command = tsc.jpPrinter.createNew();//DaYin这个字段存放我们需要打印的数据let DaYin = JSON.parse(JSON.stringify(this.rowsList));let Customer = JSON.stringify(this.Customer);//打印格式需要根据打印机的特定格式来。在tsc文件中修改格式。DaYin.forEach(e=>{command.form(e.ReceSheetNo,`客 户:${Customer}`,`匹 数:${e.Rolls}`,`坯布品名:${e.GrayID}`,`进仓编号:${e.LotNo}`,`坯布类型:${e.GrayTypeName}`)command.setPagePrint()})//转码处理this.senBlData(deviceId, serviceId, characteristicId,command.getData())
}
senBlData(deviceId, serviceId, characteristicId,uint8Array) {let uint8Buf = Array.from(uint8Array);function split_array(datas,size){let result = {};let j = 0for (var i = 0; i < datas.length; i += size) {result[j] = datas.slice(i, i + size)j++}return result}let sendloop = split_array(uint8Buf, 20);function realWriteData(sendloop, i) {let data = sendloop[i]if(typeof(data) == "undefined"){return}let buffer = new ArrayBuffer(data.length)let dataView = new DataView(buffer)uni.writeBLECharacteristicValue({deviceId,serviceId,characteristicId,value: buffer,success(res) {realWriteData(sendloop, i + 1);}})}let i = 0;realWriteData(sendloop, i);
},
form条码格式
// 条形码和文字合成打印
jpPrinter.form = function (content,text1,text2,text3,text4) {data = header + "LEFT" + "\r\n" + "GAR-SENSE" + "\r\n" + barcodeText +"BARCODE " + 128 + " " + 1 + " " + 1 + " " + 125 + " " + 125 + " " + 0 + " " + content + "\r\n" + "TEXT " + " " + 12 + " " + 0 + " " + 125 + " " + 180 + " " + text1 + "\r\n" + "TEXT " + " " + 12 + " " + 2 + " " + 125 + " " + 210 + " " + text2 + "\r\n" + "TEXT " + " " + 12 + " " + 2 + " " + 125 + " " + 240 + " " + text3 + "\r\n" + "TEXT " + " " + 12 + " " + 2 + " " + 125 + " " + 270 + " " + text4 + "\r\n" + "FORM" + "\r\n" ; jpPrinter.addCommand(data)
};
转载于:https://blog.csdn.net/zhanleibo/article/details/103035645
uni-app开发经验分享十五: uni-app 蓝牙打印功能相关推荐
- html5 app如何连接打印机,uni-app开发经验分享十五: uni-app 蓝牙打印功能
最近在做uni-app项目时,遇到了需要蓝牙打印文件的功能需要制作,在网上找到了一个教程,这里分享给大家. 引入tsc.js 简单得引入到自己所需要得页面中去,本次我们只要到了标签模式,他同时还有账单 ...
- (十五)-如何实现拍照功能
IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能 本章将来讲解下如何实现拍照的功能 我们需要的实现的效果是 好了 直接开始内容吧 首先我们需要新建一个ViewController ...
- LiveVideoStack线上交流分享 (十五) —— 熟悉技术的边界,实现1+1+13
熟悉技术应用场景,解决什么问题,方可知道采取什么技术,能够高概率解决业务问题,那么就需要为一项或多项技术点寻找到其发挥最大价值的前提条件,这样才能实现多个处理技术的组合,使业务问题能最大程度收益,实现 ...
- LiveVideoStackCon讲师热身分享 ( 十五 ) —— 教育场景下的实时音视频解决方案
LiveVideoStackCon 2018音视频技术大会是每年的多媒体技术人的盛宴,为了让参会者与大会讲师更多互动交流,我们推出了LiveVideoStackCon讲师热身分享第一季,在每周四晚19 ...
- vue.js项目实战运用篇之抖音视频APP-第十五节: 朋友页面功能
[温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...
- 我的世界服务器群系修改,我的世界创世神教程 第五十五节修改选区的生物群系|功能介绍|难点介绍|这节...
我的世界WorldEdit创世神高级系列教程 第五十五节修改选区的生物群系.本教程由64条不同的技巧,功能介绍,难点介绍,防范措施介绍,工具介绍等组成.适合高级玩家和腐竹们来学习.这节内容给大家介绍修 ...
- wgt文件怎么安装到手机_uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息...
Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取. 因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许. 读写手机存储 ...
- uni-app开发经验分享十九: uni-app对接微信小程序直播
uni-app对接微信小程序直播 1.登录微信小程序后台-点击>设置->第三方设置->添加直播插件 2.添加直播组件后->点击<详情> 记录这两个参数直播 ...
- php分享十五:php的数据库操作
一:术语解释: What is an Extension? API和扩展不能理解为一个东西,因为扩展不一定暴露一个api给用户 The PDO MySQL driver extension, for ...
- 分享十五个最佳jQuery幻灯插件和教程
<p>在网站前端中使用jQuery库已经变得越来越流行,前端开发人员发布或撰写的相关的插件和教程也与日俱增.</p> <p>幻灯(通常也被称为"内容滑动& ...
最新文章
- 改进张益唐证明,陶哲轩「他的证明比我还强」,这个天才青年还解决了困扰数学界近80年的「简单问题」...
- try...catch的方式处理多个异常
- SCI论文的时态、主动语句和被动语句总结
- Spring Cloud微服务分布式云架构—集成项目简介
- foriegn web site
- 计算机控制学什么,计算机控制技术专业介绍
- python 交易日_Python判断某天是否为A股“交易日”?
- php5.4.41 绿色_编译安装PHP5.4.41
- C++-柱面拟合FitCylinder
- 运用递归来画谢尔宾斯基三角形
- iOS 14 Beta 5 来了,修复游戏闪退问题了,还有着几个变化!
- 课后作业4:个人总结
- 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)
- MySql 下载安装
- 为什么公有云在中国落地难
- 进行软件评分的功能实现
- Pytorch+LSTM+Attention 实现 Seq2Seq
- 【HTCVR】VRTK插件案例分析之0031~037
- 初览spring boot读后感
- asm 编写 wasm 对比原生性能