首页 > 其他分享 >uniapp 蓝牙连接斑马打印机发送zpl指令打印

uniapp 蓝牙连接斑马打印机发送zpl指令打印

时间:2024-03-21 15:56:57浏览次数:34  
标签:uniapp bluetoothSocket 蓝牙 plus zpl importClass var android

历程

  • 需求是想通过斑马的zpl语言打印小票等,需要用到蓝牙连接。
  • 一开始采用的是uniapp自带的蓝牙连接和打印,用的是uni.writeBLECharacteristicValue(OBJECT)方法,蓝牙能正常连接和发送数据。奇怪的是发送蓝牙数据始终都是ok,打印机确是一点动静都没有。
  • 基于以上的疑惑,我开始怀疑是uniapp的api存在问题,于是使用c#连接蓝牙打印测试,居然成功了。那么问题就锁定了,是uniapp的api有问题
  • 于是各种找资料,后来在论坛找到了native.js蓝牙发送的,测了下果然可以。

uniapp示例

  • 两个方法,分别对应的两个按钮,依次点击就完事了

			blueOpen() {
				var main = plus.android.runtimeMainActivity();
				var Context = plus.android.importClass("android.content.Context");
				var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
				plus.android.importClass(BManager); //引入相关的method函数
				var BAdapter = BManager.getAdapter();
				plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna
				var lists = BAdapter.getBondedDevices();
				plus.android.importClass(lists);
				//var resultDiv = document.getElementById('bluetooth_list');
				var iterator = lists.iterator();
				plus.android.importClass(iterator);
				while (iterator.hasNext()) {
					var d = iterator.next();
					plus.android.importClass(d);
					console.log('d', d);
					console.log("名称:" + d.getName() + ",地址:" + d.getAddress());
				}

			},
			blueSearch() {
                //蓝牙地址
				var mac_address = "123123"
				var _this = this
				var main = plus.android.runtimeMainActivity();
				var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
				var UUID = plus.android.importClass("java.util.UUID");
				var uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
				var BAdapter = BluetoothAdapter.getDefaultAdapter();
				var device = BAdapter.getRemoteDevice(mac_address);
				plus.android.importClass(device);
				var bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
				plus.android.importClass(bluetoothSocket);

				if (!bluetoothSocket.isConnected()) {
					console.log('检测到设备未连接,尝试连接....');
					bluetoothSocket.connect();
				}

				console.log('设备已连接');

				if (bluetoothSocket.isConnected()) {
					var outputStream = bluetoothSocket.getOutputStream();
					plus.android.importClass(outputStream);
                    //斑马zpl语言
					var string = `^XA^FO50,50^A0N,50,50^FDHello, World!hahahha^FS^XZ`
					var bytes = plus.android.invoke(string, 'getBytes', 'gbk');
					outputStream.write(bytes);
					console.log('发送数据完成', bytes);
					outputStream.flush();
					//成功!!!!
					//device = null //这里关键  
					//bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误  

				}

			},

c#蓝牙示例

        static void PrintTest()
        {
            //有时候无反应,重新打印机 
          
            BluetoothClient client = new BluetoothClient();
            BluetoothDeviceInfo[] devices = client.DiscoverDevices();
            //蓝牙地址
            var device = devices.FirstOrDefault(a => a.DeviceAddress.ToString() == "123123");

            // 连接到蓝牙设备
            BluetoothAddress address = device.DeviceAddress;
            Guid serviceClass = BluetoothService.SerialPort;
            BluetoothEndPoint endPoint = new BluetoothEndPoint(address, serviceClass);
            BluetoothClient clientConn = new BluetoothClient();
            clientConn.Connect(endPoint);

            // 发送数据
            Stream peerStream = clientConn.GetStream();
            byte[] data = System.Text.Encoding.ASCII.GetBytes(@"^XA
            ^FO50,50^A0N,50,50^FDHello, World!^FS
            ^XZ");

            peerStream.Write(data, 0, data.Length);

            // 关闭连接
            clientConn.Close();

            Console.WriteLine("Communication finished.");

        }

标签:uniapp,bluetoothSocket,蓝牙,plus,zpl,importClass,var,android
From: https://www.cnblogs.com/Alex-Mercer/p/18087563

相关文章

  • uniapp怎么获取元素高度,获取元素节点信息,获取界面剩余高度
    一、在uniapp项目开发的过程中,常常需要获取元素的高度信息,来更容易的实现元素的布局控制,使用场景:列入动态的计算容器的高度,设置组件的最小高度等等在获取元素节点信息中,通常有两种情况:①获取单个②获取v-for循环元素的节点信息,话不多说,直接上代码注意:需要在onReady()之后获取,否则......
  • uniapp获取定位导致APP闪退
    刚开始用setInterval定时1秒获取地图定位,因为uni.getLocation经常会返回失败,导致整个定时器错乱闪屏崩溃。本页面有一个webview,通过evalJS执行webview嵌套页面的方法。<web-view@message="getMessage"v-if="url":src="url"></web-view> 错误代码:this.time=setInterv......
  • 蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化
    最近在做蓝牙的宽带语音通话。相对于蓝牙窄带语音,主要变化是把采样率从8k变到16k,以及编解码器从CVSD变成mSBC(modifiedSBC,改进的SBC)等。蓝牙语音通话相关的HFP(HandFreeProfile)强烈建议在宽带语音通话时要用上语音丢包补偿(packetlostconcealment,PLC)算法来保证丢包时的语音质量,......
  • 【基于stm32-心率血氧量检测系统(蓝牙,手机app)】
    一、项目描述:心率血氧量检测系统基于STM32芯片的设计将为用户提供高效、可靠的健康监测解决方案。以下是这一系统的主要特点和功能:STM32芯片驱动:采用STM32系列芯片作为主控制器,具有高性能和低功耗特性,能够确保系统稳定运行并延长电池寿命。传感器集成:整合了高精度的心率和血......
  • uniapp 开发模板
    简介vue3-uniapp-template是基于vue3的uniapp快速开发模板,包含状态管理、网络请求、路由拦截、UI组件等常用功能。主要使用的技术栈:uniapp、vue3、pinia、vite、uv-ui下载地址PS:如果对你有帮助的话,点个Star支持下哈~GithubGitee项目启动#克隆代码gitclonehttps://gi......
  • 【uniapp】表单验证不生效的解决方案
    表单验证这个常见的功能,明明在elementui等框架已经用的很熟了,在uniapp开发时还是处处碰壁?这篇文章我会提示uni-forms表单验证的几个注意点,帮助大家排查。示例下面是一份包含普通验证和自定义验证的示例:<uni-formsref="baseForm":rules="rules":modelValue="form"> <un......
  • uniapp 云开发省钱之调整函数执行内存大小
    我这个5块钱一个月的服务空间配置:现在还只有少量的用户和自己测试之用,目前消耗的情况:云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云函数使用量了。看了下云函数使用量的计费方式,发现云函数的使用消耗跟......
  • uniapp 云开发省钱之调整函数执行内存大小
    我这个5块钱一个月的服务空间配置: 现在还只有少量的用户和自己测试之用,目前消耗的情况: 云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云函数使用量了。看了下云函数使用量的计费方式,发现云函数的使用消耗......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—主机通过从机蓝牙名称建立连接
    -------------------------------------------------------------------------------------------------------------------------------------  在蓝牙主机与蓝牙从机建立连接的方式有很多种,默认是通过MAC地址建立连接,这里讲解以蓝牙名称建立连接的方式。先获取到从机的扫描......
  • uniapp实现返回顶部
    应用场景在uniapp中文章页或者长列表页实现返回顶部的效果。实现代码<template><viewclass="news_detail_container"><viewclass='back_btn'v-show="showBack"@tap="handleTop"><imgclass="back_i......