uniapp通過webview套h5時使用plus調取藍牙/usb打印

?安卓使用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;互…