安卓使用usb调取打印机

/*** 安卓usb调取打印机*@param { string | bytes[] } html 传入的打印内容*传入一段文本或一个bytes数组* @returns*/
export const printUsb = (html) => {return new Promise((resolve, reject) => {if (!window.plus) return reject(new Error("请在安卓环境中使用!"));//如果参数不是字符串或bytes数组直接报错if (!Array.isArray(html) && typeof html !== "string")return reject(new Error("参数不正确!"));try {const context = plus.android.runtimeMainActivity();const usbManager = context.getSystemService("usb");//引入usb类plus.android.importClass(usbManager);//获取到设备列表const devices = usbManager.getDeviceList();const values = plus.android.invoke(devices, "values");//调用values方法获取usb设备列表const deviceList = plus.android.invoke(values, "toArray");const printerList = deviceList.filter((item) => {const usbInterface = plus.android.invoke(item, "getInterface", 0);const usbType = plus.android.invoke(usbInterface, "getInterfaceClass");//usb类型为7的时候是打印机if (usbType === 7) return item;});//如果打印机不存在,直接阻断if (!printerList.length) return reject(new Error("请连接打印机设备!"));//usb设备(我这里选择打印机的第一台连接,如果要连多台打印机可以用上面获取的pinterList打印机列表进行操作)const device = printerList[0];const PendingIntent = plus.android.importClass("android.app.PendingIntent",);const Intent = plus.android.importClass("android.content.Intent");//申请usb传输权限const pendingIntent = PendingIntent.getBroadcast(context,0,new Intent("ACTION_USB_PERMISSION"),PendingIntent.FLAG_UPDATE_CURRENT,);//判断是否具有权限const isExist = plus.android.invoke(usbManager, "hasPermission", device);//如果权限不存在申请权限if (!isExist) {//请求读写权限usbManager.requestPermission(device, pendingIntent);return resolve('已获取usb权限!');}//建立连接const socket = usbManager.openDevice(device);if (!socket) return reject(new Error("usb连接失败!"));const iface = plus.android.invoke(device, "getInterface", 0);plus.android.invoke(socket, "claimInterface", iface, true);//批量传输示例const endpoint = plus.android.invoke(iface, "getEndpoint", 0);//根据传入的内容类型做处理const buffer =typeof html === "string"? plus.android.invoke(html, "getBytes", "gbk"): html;plus.android.invoke(socket,"bulkTransfer",endpoint,buffer,buffer.length,5000,);//释放usb端口资源plus.android.invoke(socket, "releaseInterface", iface);//关闭usb连接plus.android.invoke(socket, "close");resolve("打印成功!");} catch (error) {reject(error);}});
};

安卓使用蓝牙调取打印机设备

/**
*安卓使用蓝牙调取打印机
*@param { string } deviceId 蓝牙的mac地址(即设备id)
*@param { string } html 需要打印的文本 
*/
export const printBluetooth(deviceId, html) {return new Promise((resolve, reject) => {try {plus.android.runtimeMainActivity();const BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter",);const UUID = plus.android.importClass("java.util.UUID");const uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");const Adapter = BluetoothAdapter.getDefaultAdapter();Adapter.cancelDiscovery(); //停止扫描const device = Adapter.getRemoteDevice(deviceId);plus.android.importClass(device);const bluetoothSocket =device.createInsecureRfcommSocketToServiceRecord(uuid);plus.android.importClass(bluetoothSocket);if (!bluetoothSocket.isConnected()) {bluetoothSocket.connect();}const outputStream = bluetoothSocket.getOutputStream();plus.android.importClass(outputStream);const bytes = plus.android.invoke(html, "getBytes", "gbk");outputStream.write(bytes);outputStream.flush();outputStream.close();resolve();} catch (error) {reject(error);}});
}

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

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

相关文章

吃透 Golang 基础:基于共享变量的并发

文章目录 sync.Mutex 互斥锁sync.RWMutex 读写锁sync.Once 惰性初始化Goroutine 与线程动态栈Goroutine 调度GOMAXPROCSGoroutine 没有 ID 号 上一篇文章当中我们已经系统性地回顾了在 Go 当中基于 Goroutine 和 Channel 进行并发控制的方法,Goroutine 指的是 Golan…

智绅科技丨如何选择一家好的养老机构?

居家养老、社区养老和机构养老是我们在养老相关消息中常常听到的3个词。在地方文件中,居家养老和社区养老还经常被统称为居家社区养老或 社区居家养老。那么,这三者之间到底有什么不同呢? 居家养老服务涵盖生活照料、家政服务、康复护理、医…

【支持向量机】SVM线性支持向量机学习算法——软间隔最大化支持向量机

支特向量机(support vector machines, SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器。包含线性可分支持向量机、 线性支持向量机、非线性支持向量机。 当训练数据近似线性可分时,通过软间隔最大化学习线性分类器, 即为…

面试 — 预准备 — 面试前准备攻略

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 只讲干货,不罗里吧嗦! 作为一个软件从业者,在面试前的准备工作至关重要,能大幅提升你的求职成功…

Oracle停库shutdown长时间无反应

Oracle停库shutdown长时间无反应 现象:Oracle停库卡住,长时间没有反应。 SQL> shutdown immediate;注:此时切记不可Ctrl+C直接取消!切记不可Ctrl+C直接取消!切记不可Ctrl+C直接取消! 检查alert_SID.log日志看是哪些会话进程导致的: Shutting down instance (immed…

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十八讲

列表部件基本上是一个采用垂直布局的矩形,可向其中添加按钮和文本。 部件包含: LV_PART_MAIN - 主要的属性,大部分是这个部件。 LV_PART_SCROLLBAR - 滚动条的属性。 (1) 添加文本 lv_obj_t * lv_list_add_text(lv_o…

Android Navigation 原理解析

1. nav_graph.xml 如何生成路由表 NavGraph 解析流程与原理 关键技术点&#xff1a; XML 解析&#xff1a; 使用 XmlResourceParser 解析 XML 文件 遍历所有节点&#xff08;<fragment>, <activity>, <navigation>等&#xff09; Destination 创建&#…

HarmonyOS 应用权限管控流程

HarmonyOS 应用权限管控流程详解 一、权限管控概述 HarmonyOS 通过多层次的安全机制保护用户数据和系统资源&#xff0c;其中应用权限管控是核心组成部分。系统通过以下机制实现权限管控&#xff1a; 应用沙箱&#xff1a;每个应用运行在独立沙箱中&#xff0c;通过TokenID识…

Python训练营-Day33

import torch torch.cudaimport torch# 检查CUDA是否可用 if torch.cuda.is_available():print("CUDA可用&#xff01;")# 获取可用的CUDA设备数量device_count torch.cuda.device_count()print(f"可用的CUDA设备数量: {device_count}")# 获取当前使用的C…

【STM32】中断优先级管理 NVIC

这篇文章是对 Cortex-M3 内核中断系统 和 STM32F1 系列 NVIC(嵌套向量中断控制器) 的解析说明。我将从结构清晰、层次分明的角度,对 NVIC 中断优先级分组的概念和 STM32F103 的实际情况做一个系统性的总结与叙述。 参考资料: STM32F1xx官方资料:《STM32中文参考手册V10》…

Angular2--高级特性(TODO)

1 基础 关于Angular的基础部分&#xff0c;几个核心部分和框架&#xff0c;在之前都写过了。Angular1--Hello-CSDN博客 Angular的几个核心部分和框架&#xff1a; 模板就是组件中的template&#xff0c;对应MVC的V。 组件类就是Component类&#xff0c;对应对应MVC的C。 服…

pikachu靶场通关笔记44 SSRF关卡02-file_get_content(三种方法渗透)

目录 一、SSRF 1、简介 2、原理 二、file_get_contents函数 1、功能 2、参数 3、返回值 4、file_get_contents与SSRF 三、渗透实战 1、基本探测 2、http协议 &#xff08;1&#xff09;访问upload-labs靶场 &#xff08;2&#xff09;访问yijuhua.txt 3、file协议…

Android 控件 - EditText 的 Hint(Hint 基本用法、Hint 进阶用法、单独设置 Hint 的大小)

一、EditText 的 Hint 1、基本介绍 在 Android 开发中&#xff0c;EditText 的 Hint 用于显示提示文本 提示文本当用户没有输入任何内容时显示&#xff0c;输入内容后自动消失 2、基本使用 &#xff08;1&#xff09;在 XML 布局文件中设置 在 XML 布局文件中设置 Hint …

PostgreSQL(知识片):索引关联度indexCorrelation

索引关联度的绝对值越大&#xff0c;说明这个索引数据越好。绝对值最大为1。 首先我们创建一个表&#xff1a;tbl_corr&#xff0c;包含列&#xff1a;col、col_asc、col_desc、col_rand、data&#xff0c;col_asc存储顺序数据&#xff0c;col_desc存储降序数据&#xff0c;col…

React纯函数和hooks原理

纯函数 JS 若满足其下条件 &#xff0c;被称为纯函数 1。确定的输入一定产生确定的输出 2 不产生副作用 另外redux中的reducer也要求是纯函数 Fiber 架构和hooks原理 useRef 在组件的整个声明周期内保持不变 用法&#xff1a;1绑定dom元素 或者 绑定一个类组件 因为函数式…

养老专业实训室虚拟仿真建设方案:助力人才培养与教育教学革新

随着我国老龄化程度加深&#xff0c;养老服务行业人才需求激增。养老专业实训室虚拟仿真建设方案凭借虚拟仿真技术&#xff0c;为养老专业教育教学带来革新&#xff0c;对人才培养意义重大。点击获取实训室建设方案 一、构建多元化虚拟场景&#xff0c;丰富实践教学内容 模拟居…

LangChain 提示词工程:语法结构详解与完整实战指南

LangChain 提示词工程&#xff1a;语法结构详解与完整实战指南 我将为您系统性地解析 LangChain 中各类提示模板的核心语法结构&#xff0c;通过清晰展示语法与对应代码示例&#xff0c;帮助您彻底掌握提示工程的实现方法。所有示例均围绕报幕词生成场景展开。 在这里插入图片…

20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题

Z:\14TB\versions\rk3588-android14-FriendlyElec\mkcombinedroot\res\vendor_modules.load 【拿掉/删除这一项目&#xff01;】 cfg80211.ko 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题 2025/6/25 20:20 缘起&#xff1a;本文针对…

在WSL下搭建JavaWeb: JDBC学习环境

在WSL下搭建JavaWeb: JDBC学习环境 前言 ​ 笔者最近打算放松一下&#xff0c;接触一点经典的Java Web技术&#xff0c;自己在闲暇时间时玩一玩JavaWeb技术。这里开一个小系列整理一下最近学习的东西&#xff0c;以供参考和学习。 ​ 笔者的计划是使用VSCode写代码&#xff…

pscc系统如何部署,怎么更安全更便捷?

磐石云PSCC系统的安全高效部署需结合云原生架构与零信任安全模型&#xff0c;以下是经过大型项目验证的部署方案及最佳实践&#xff1a; 一、智能部署架构&#xff08;混合云模式&#xff09; 二、安全增强部署方案 1. 基础设施安全 网络隔离 采用 三层网络分区&#xff1a;互…