安卓使用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);}});
}