蓝牙打印和网口打印的实现

蓝牙打印的js
export default {install(Vue,options){// 蓝牙搜索方法Vue.prototype.SearchBluetooth = function () {/*plus变量定义*/var main, BluetoothAdapter, BAdapter, IntentFilter, BluetoothDevice, receiver;/*其他定义*/var isSearchDevices = false, //是否处于搜索状态debug = false; //调试模式main = plus.android.runtimeMainActivity(),BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"),IntentFilter = plus.android.importClass('android.content.IntentFilter'),BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice"),BAdapter = new BluetoothAdapter.getDefaultAdapter();return {// 检查蓝牙是否开启CheckBluetoothState:function(){return BAdapter.isEnabled();},// 开启蓝牙StartBluetooth:function(CallBack){var self = this; if(!BAdapter.isEnabled()) {  // isEnabled判断蓝牙状态plus.nativeUI.confirm("蓝牙处于关闭状态,是否打开?", function(e) {if(e.index == 0) {var enable = BAdapter.enable(); // 请求开启蓝牙console.log(enable);                             CallBack(true);}else{CallBack(false);}});}},// 开始搜索设备StartSeatch:function(CallBack,errcallback){try {var self = this;isSearchDevices = true;var filter = new IntentFilter(),bdevice = new BluetoothDevice();BAdapter.startDiscovery(); //开启搜索receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {onReceive: onReceiveFn});filter.addAction(bdevice.ACTION_FOUND);filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);filter.addAction(BAdapter.ACTION_STATE_CHANGED);main.registerReceiver(receiver, filter); //注册监听事件//监听回调函数  回调函数会在搜索期间 持续调用function onReceiveFn(context, intent) {plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作//开始搜索改变状态intent.getAction() === "android.bluetooth.device.action.FOUND" && (isSearchDevices = true);//判断是否搜索结束if(intent.getAction() === 'android.bluetooth.adapter.action.DISCOVERY_FINISHED') {main.unregisterReceiver(receiver); //取消监听isSearchDevices = false;errcallback();return;}var BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE), // 设备对象bleName = BleDevice.getName(), //设备名称bleId = BleDevice.getAddress(); //设备mac地址console.dir(JSON.stringify(BleDevice));if(!bleName || !bleId) {CallBack(false);}//判断是否配对if(BleDevice.getBondState() === bdevice.BOND_BONDED) { // 已配对的蓝牙设备CallBack({BleDevice:BleDevice,bleName:bleName, // 设备名称bleId:bleId, // 设备idisPaired:true,is_active:false});} else { // 未配对的蓝牙设备CallBack({BleDevice:BleDevice,bleName:bleName, // 设备名称bleId:bleId, // 设备idisPaired:false});}}}catch(err) {errcallback();}   },// 配对蓝牙设备Bluepairing:function(BleDevice,bleId,CallBack,ErrCallBack){try {var self = this,bdevice = new BluetoothDevice(), // new java android.bluetooth.BluetoothDevice对象BleDeviceItem = BleDevice; // 赋值设备if(BleDeviceItem.getAddress() === bleId){BleDeviceItem.createBond(); // 设备进行配对var timeout = setInterval(function(){ // 创建定时器轮询配对结果if(BleDeviceItem.getBondState() === bdevice.BOND_BONDED) { // 配对成功window.clearInterval(timeout);CallBack({status:true,errmsg:'配对成功'});} else if(BleDeviceItem.getBondState() === bdevice.BOND_NONE) { // 配对失败window.clearInterval(timeout);ErrCallBack({status:false,errmsg:'配对失败,请尝试重新配对'});}},1000);}else{ErrCallBack({status:false,errmsg:'设备有误'});}}catch(err) {ErrCallBack({status:false,errmsg:'异常错误'});} },CancelSearch:function(){ // 取消搜索main.unregisterReceiver(receiver); //取消监听},}};// 打印机连接方法Vue.prototype.ConnectPrinter = {// 首次new这个类会创建进行连接BluePrinter:function(bleId){ // 蓝牙打印机连接var plusMain = plus.android.runtimeMainActivity(),BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"),UUID = plus.android.importClass("java.util.UUID"),uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"),BAdapter = BluetoothAdapter.getDefaultAdapter(),device = BAdapter.getRemoteDevice(bleId);plus.android.importClass(device);var bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);plus.android.importClass(bluetoothSocket);if(!bluetoothSocket.isConnected()) {try {bluetoothSocket.connect();} catch (e) {console.log(e);}                   }// 判断是否连接 没有连接则连接this.Print = function(byteStr){ // 打印的方法var outputStream = bluetoothSocket.getOutputStream();plus.android.importClass(outputStream);var bytes = plus.android.invoke(byteStr, 'getBytes', 'gbk');try {outputStream.write(bytes);} catch (e) {mui.toast('打印失败!');}                    outputStream.flush();device = null;// bluetoothSocket.close();console.log(2);};// 检查是否连接this.ConnectStatus = function(){return bluetoothSocket.isConnected();};// 关闭连接this.CloseConnect = function(){bluetoothSocket.close();};// 连接方法this.ConnectDevice = function(){try{bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);bluetoothSocket.connect();}catch(err){console.log(err.message);return false;}};// 保存当前连接的bleId 用于判断使用单例模式this.BleId = bleId;}};}}
网口打印的js
export default {sockets:false,connectstatus:false,printIns:'',socketconnect:function(ip,port){try{if(plus.os.name=='Android'){var res = this.androidconnect(ip,port);return res;}if(plus.os.name == 'iOS'){}}catch(e){mui.toast("连接错误");return false;}},print:function(datastr,mm){this.printIns.println(datastr);this.sockets.close();},androidconnect:function(ip,port){if(this.sockets){if(this.sockets.isConnected() && !this.sockets.isClosed()){}else{var res = this.connectsockte(ip,port);return res;}}else{var res = this.connectsockte(ip,port);return res;}},connectsockte(ip,port){try{var Socket = plus.android.importClass("java.net.Socket");var PrintWriter = plus.android.importClass("java.io.PrintWriter");var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");var BufferedReader = plus.android.importClass("java.io.BufferedReader");var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");var SocketAddress = plus.android.importClass("java.net.InetSocketAddress");//测试改良var StrictMode = plus.android.importClass("android.os.StrictMode");var Build = plus.android.importClass("android.os.Build");if (Build.VERSION.SDK_INT > 9) {var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);}var socket = new Socket();var socketAddr = new SocketAddress(ip,port);socket.connect(socketAddr,2000);var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(),'gbk');var bufferWriter = new BufferedWriter(outputStreamWriter);var out = new PrintWriter(bufferWriter, true);this.sockets = socket;this.printIns = out;mui.toast("连接成功");return true;}catch(e){mui.toast("连接打印机失败");return false;}},socketclose:function(){this.sockets.close();}
}
具体domo地址

https://github.com/Sun-Traget/print

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Code 自动保存 码格式化

{"editor.formatOnSave": true, // #每次保存的时候自动格式化"editor.codeActionsOnSave": { // #每次保存的时候将代码按eslint格式进行修复"source.fixAll.eslint": true}, }

上去很美的 Serverless 在中国落地的怎么样了?

说起当前最火的技术,不得不提的一个概念就是 Serverless。2019 年几乎所有人都在说 Serverless,实际落地 Serverless 的有多少?Serverless 作为一种新型的互联网架构,直接或间接推动了云计算的发展,从 AWS Lambda 到阿…

Knative 驾驭篇:带你 '纵横驰骋' Knative 自动扩缩容实现

Knative 中提供了自动扩缩容灵活的实现机制,本文从 三横两纵 的维度带你深入了解 KPA 自动扩缩容的实现机制。让你轻松驾驭 Knative 自动扩缩容。 注:本文基于最新 Knative v0.11.0 版本代码解读 KPA 实现流程图 在 Knative 中,创建一个 Rev…

MongoDB 计划从“Data Sprawl”中逃脱

原文作者 | Adrian Bridgwater译者 |天道酬勤,责编 |晋兆雨头图 | CSDN 付费下载自视觉中国提供特定技术子集的软件供应商,喜欢用尽可能广泛的标签来提升自己,这是一种传达平台宽度和能力的方式。我们知道MongoDB以开源根数据库而闻名&#x…

FastMock

文章目录官网文档官网 官网:https://www.fastmock.site/#/ 文档 https://marvengong.gitee.io/fastmock/#/

关于在nw里使用require('printer')和nw.require('printer')报错的问题

公司项目为了兼容xp所以使用nw.js(0.14.7-sdk),用到了printer模块(第三方的c打印模块),在引入该模块的时候,使用了require导致一直报cannot find modul “.”,后来改用nw.require&am…

小蜜团队万字长文 | 讲透对话管理模型最新研究进展

对话管理模型背景 从人工智能研究的初期开始,人们就致力于开发高度智能化的人机对话系统。艾伦图灵(Alan Turing)在1950年提出图灵测试[1],认为如果人类无法区分和他对话交谈的是机器还是人类,那么就可以说机器通过了…

mockjs

文章目录官网文档地址示例官网 :http://mockjs.com/ 文档地址 https://github.com/nuysoft/Mock/wiki/Getting-Started 示例 http://mockjs.com/examples.html

瓜子二手车在 Dubbo 版本升级、多机房方案方面的思考和实践

前言 随着瓜子业务的不断发展,系统规模在逐渐扩大,目前在瓜子的私有云上已经运行着数百个 Dubbo 应用,上千个 Dubbo 实例。瓜子各部门业务迅速发展,版本没有来得及统一,各个部门都有自己的用法。随着第二机房的建设&a…

炸裂!谷歌这波操作,预警了什么?

我们都知道谷歌爸爸收购了Cask Data一家公司。长期以来,谷歌致力于推动围绕 GoogleCloud 的企业业务,但在这方面一直被亚马逊和微软吊打,这次的收购正是为了弥补自身的短板。被收购的 Cask Data 是一家专门提供基于Hadoop的大型数据分析服务解…

美团点评基于 Flink 的实时数仓平台实践

一、美团点评实时计算演进 美团点评实时计算演进历程 在 2016 年,美团点评就已经基于 Storm 实时计算引擎实现了初步的平台化。2017 年初,我们引入了 Spark Streaming 用于特定场景的支持,主要是在数据同步场景方面的尝试。在 2017 年底&am…

element-ui简单使用

1.安装 npm i element-ui -S2.使用在main.js import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(ElementUI);3.sublime text安装element-ui代码片段插件 打开sublime text的安装目录,找到存放插件的目录,例如…

koa-generator 快速生成 koa2 服务的脚手架工具

文章目录1. 全局安装脚手架工具2. 执行生成3. 安装依赖4. 启动服务5. 默认的访问地址通常我们可以借助于脚手架,快速创建一个Koa2项目,当然也可以自己从头搭建;脚手架会帮我们提前搭好基本的架子 1. 全局安装脚手架工具 cnpm install -g koa…

轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源&#xff…

股市中的Santa Claus Rally (圣诞节行情)

圣诞节行情 Santa Claus Rally Santa Claus Rally 是指 12 月 25 日圣诞节前后股市的持续上涨这样一个现象。《股票交易员年鉴》的创始人 Yale Hirsch 于 1972 年创造了这个定义,他将当年最后五个交易日和次年前两个交易日的时间范围定义为反弹日期。 根据 CFRA Re…

没想到!!Unicode 字符还能这样玩?

来源 | 程序通事责编 |晋兆雨头图 | CSDN 付费下载自视觉中国上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。图片来自网络还没来得及了解咋回事来着,这个直升飞机就????到的微博热搜。图片来自网络后…

开发小程序问题总结

1.获取页面可视区的高度 //getSystemInfoSync是获取系统的信息的 wx.getSystemInfoSync().windowHeight;2.获取页面的dom元素,原生js在小程序中是无法获取到dom元素的,可以通过下面的方式获取 //https://developers.weixin.qq.com/miniprogram/dev/api…

为什么 APP 纷纷开发“暗黑模式”?优酷最佳实践总结

一、缘起 随着iOS 13和Android 10的正式发布,一个名词"暗黑模式(Dark Mode)"逐渐走入了大家的视野。各大APP都将暗黑模式的适配列入了开发日程,舆情上用户们对暗黑模式支持的呼声也非常的高。优酷主客也顺应时势,启动了相应的技术…

Mongo 安装、配置、启动 Windows

文章目录一、Mongo 安装1. Mongo 下载2. 安装3. 配置环境变量4. 验证5. 连接二、Mongo 配置2.1. 编辑mongod.cfg2.2. 修改dbPath2.3. systemLog路径2.4. 启动Mongod服务2.5. 安装MongoDB服务2.6. 验证一、Mongo 安装 1. Mongo 下载 下载Mongo数据库并安装 https://www.mongod…

混合云存储阵列与云存储网关的协同解决方案

前言 混合云存储阵列(CSA)于2017年云栖大会发布,上市2年多,已经被基因测序,医疗PACS,影视制作,非编,广电,视频监控等行业和场景的客户广泛采用。混合云存储阵列承载了用户…