最近在做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 蓝牙打印功能相关推荐

  1. html5 app如何连接打印机,uni-app开发经验分享十五: uni-app 蓝牙打印功能

    最近在做uni-app项目时,遇到了需要蓝牙打印文件的功能需要制作,在网上找到了一个教程,这里分享给大家. 引入tsc.js 简单得引入到自己所需要得页面中去,本次我们只要到了标签模式,他同时还有账单 ...

  2. (十五)-如何实现拍照功能

    IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能 本章将来讲解下如何实现拍照的功能 我们需要的实现的效果是      好了 直接开始内容吧 首先我们需要新建一个ViewController ...

  3. LiveVideoStack线上交流分享 (十五) —— 熟悉技术的边界,实现1+1+13

    熟悉技术应用场景,解决什么问题,方可知道采取什么技术,能够高概率解决业务问题,那么就需要为一项或多项技术点寻找到其发挥最大价值的前提条件,这样才能实现多个处理技术的组合,使业务问题能最大程度收益,实现 ...

  4. LiveVideoStackCon讲师热身分享 ( 十五 ) —— 教育场景下的实时音视频解决方案

    LiveVideoStackCon 2018音视频技术大会是每年的多媒体技术人的盛宴,为了让参会者与大会讲师更多互动交流,我们推出了LiveVideoStackCon讲师热身分享第一季,在每周四晚19 ...

  5. vue.js项目实战运用篇之抖音视频APP-第十五节: 朋友页面功能

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  6. 我的世界服务器群系修改,我的世界创世神教程 第五十五节修改选区的生物群系|功能介绍|难点介绍|这节...

    我的世界WorldEdit创世神高级系列教程 第五十五节修改选区的生物群系.本教程由64条不同的技巧,功能介绍,难点介绍,防范措施介绍,工具介绍等组成.适合高级玩家和腐竹们来学习.这节内容给大家介绍修 ...

  7. wgt文件怎么安装到手机_uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息...

    Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取. 因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许. 读写手机存储 ...

  8. uni-app开发经验分享十九: uni-app对接微信小程序直播

    uni-app对接微信小程序直播 1.登录微信小程序后台-点击>设置->第三方设置->添加直播插件 2.添加直播组件后->点击<详情>      记录这两个参数直播 ...

  9. php分享十五:php的数据库操作

    一:术语解释: What is an Extension? API和扩展不能理解为一个东西,因为扩展不一定暴露一个api给用户 The PDO MySQL driver extension, for ...

  10. 分享十五个最佳jQuery幻灯插件和教程

    <p>在网站前端中使用jQuery库已经变得越来越流行,前端开发人员发布或撰写的相关的插件和教程也与日俱增.</p> <p>幻灯(通常也被称为"内容滑动& ...

最新文章

  1. 改进张益唐证明,陶哲轩「他的证明比我还强」,这个天才青年还解决了困扰数学界近80年的「简单问题」...
  2. try...catch的方式处理多个异常
  3. SCI论文的时态、主动语句和被动语句总结
  4. Spring Cloud微服务分布式云架构—集成项目简介
  5. foriegn web site
  6. 计算机控制学什么,计算机控制技术专业介绍
  7. python 交易日_Python判断某天是否为A股“交易日”?
  8. php5.4.41 绿色_编译安装PHP5.4.41
  9. C++-柱面拟合FitCylinder
  10. 运用递归来画谢尔宾斯基三角形
  11. iOS 14 Beta 5 来了,修复游戏闪退问题了,还有着几个变化!
  12. 课后作业4:个人总结
  13. 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)
  14. MySql 下载安装
  15. 为什么公有云在中国落地难
  16. 进行软件评分的功能实现
  17. Pytorch+LSTM+Attention 实现 Seq2Seq
  18. 【HTCVR】VRTK插件案例分析之0031~037
  19. 初览spring boot读后感
  20. asm 编写 wasm 对比原生性能

热门文章

  1. php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
  2. PIE-Engine教程—中国降水分布可视化加载以2018年为例(含图例添加)
  3. Redis开发运维实践开发者设计规范之延迟考虑
  4. 计算机硬盘坏道有什么特点,硬盘坏道对电脑会造成什么影响
  5. ACCESS使用技巧三则
  6. 【GNSS】GNSS数据下载工具
  7. git 放弃本地修改
  8. linux mysql.sock文件_关于linux上mysql.sock文件的个人理解
  9. 系统进化树-原理介绍及软件使用
  10. STM32单片机和51单片机有何区别?