日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USB热敏打印机(佳博)

發布時間:2024/1/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USB热敏打印机(佳博) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近公司對接好多打印機,最后找到佳博。對接的時候有很多的坑,在沒有技術對接的情況下我只能一個一個坑的探
首先有必要講明一下必須完成和注重的地方

準備工作(必要)

主要是文檔上說的,看文檔真的很有必要。

1-sdk大致分為兩部分,打印機與客顯,不使用客顯可以不添加so。如果只考慮打印就只把libs文件的jar拷貝的自己的項目

同樣這也是我要實現的部分。

2-注冊服務和權限

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.sample"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="22" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.hardware.usb.accessory" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-feature android:name="android.hardware.usb.host" /><applicationandroid:allowBackup="true"android:icon="@drawable/launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><serviceandroid:name="com.gprinter.service.GpPrintService"android:enabled="true"android:exported="true"android:label="GpPrintService" ><intent-filter><action android:name="com.gprinter.aidl.GpPrintService" /></intent-filter></service><service android:name="com.gprinter.service.AllService" ></service></application></manifest>

3-添加aidl 文件

其內容大致為

package com.gprinter.aidl;interface GpService{int openPort(int PrinterId,int PortType,String DeviceName,int PortNumber);void closePort(int PrinterId);int getPrinterConnectStatus(int PrinterId);int printeTestPage(int PrinterId);void queryPrinterStatus(int PrinterId,int Timesout,int requestCode);int getPrinterCommandType(int PrinterId);int sendEscCommand(int PrinterId, String b64);int sendLabelCommand(int PrinterId, String b64);void isUserExperience(boolean userExperience);String getClientID();int setServerIP(String ip, int port); }

4-啟動并綁定PrinterPrintService 服務

private PrinterServiceConnection conn = null;class PrinterServiceConnection implements ServiceConnection {@Overridepublic void onServiceDisconnected(ComponentName name) {Log.i("ServiceConnection", "onServiceDisconnected() called");mGpService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mGpService = GpService.Stub.asInterface(service);}}@Overridepublic void onCreate(Bundle savedInstanceState) {conn = new PrinterServiceConnection();Intent intent = new Intent(this, GpPrintService.class);bindService(intent, conn, Context.BIND_AUTO_CREATE); // bindService}

5-使用打印服務

到了這一步我就開始跳坑了,一步兩步似魔鬼的步伐,我就開始一步一步把自己遇到的坑的解決方法貼出來

1、USB打印調用int openPort(int PrinterId,int PortType,String DeviceName,int PortNumber);

該接口的作用主要是打開客戶端打開客戶端與打印機通訊端口,該接口會通過廣播返回PrinterId的打印機的連接狀態。這就是我遇到的第一個坑,如果仔細看文檔的朋友可以看到‘DeviceName’該字段需要獲取USB鏈接設備的名字的
我該怎么獲得呢,靜下心深挖以后,終于找到了方法。

/*** 獲取USB打印機的名字** @return 返回的打印設備的名字, noDevices:沒有獲取到任何打印設備*/private String getUsbDevices() {String usbname = "";UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);HashMap<String, UsbDevice> devices = manager.getDeviceList();Iterator<UsbDevice> deviceIterator = devices.values().iterator();int count = devices.size();Log.d(DEBUG_TAG, "count " + count);if (count > 0) {while (deviceIterator.hasNext()) {UsbDevice device = deviceIterator.next();String devicename = device.getDeviceName();if (checkUsbDevicePidVid(device)) {Log.e(DEBUG_TAG, "DevicesName " + devicename);usbname = devicename;}}} else {Log.e(DEBUG_TAG, "noDevices ");usbname = "noDevices";}return usbname;}/*** 判斷是否是USB打印機** @param dev* @return*/private boolean checkUsbDevicePidVid(UsbDevice dev) {int pid = dev.getProductId();int vid = dev.getVendorId();boolean rel = false;if ((vid == 34918 && pid == 256) || (vid == 1137 && pid == 85) || (vid == 6790 && pid == 30084) || (vid == 26728 && pid == 256) || (vid == 26728 && pid == 512) || (vid == 26728 && pid == 256) || (vid == 26728 && pid == 768) || (vid == 26728 && pid == 1024) || (vid == 26728 && pid == 1280) || (vid == 26728 && pid == 1536)) {rel = true;}ret

鏈接打印機

class PrinterServiceConnection implements ServiceConnection {
@Override
public void onServiceDisconnected(ComponentName name) {

Log.i(DEBUG_TAG, "onServiceDisconnected() called");mGpService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mGpService = GpService.Stub.asInterface(service);initUSBDevices();}}/*** 啟動打印服務*/public void connection() {conn = new PrinterServiceConnection();Log.i(DEBUG_TAG, "connection");Intent intent = new Intent(context, GpPrintService.class);context.bindService(intent, conn, Context.BIND_AUTO_CREATE); // bindService}/*** 鏈接USB打印設備*/private void initUSBDevices() {int rel = 0;if (TextUtils.isEmpty(DeviceName)) {if (DeviceName.equals("noDevices")) showToast("請檢查打印機設備是否連接");return;}try {rel = mGpService.openPort(PrinterId, PortParameters.USB, DeviceName, 0);GpCom.ERROR_CODE r = GpCom.ERROR_CODE.values()[rel];switch (r) {case SUCCESS://正常Log.e(DEBUG_TAG, "正常");break;case FAILED://失敗Log.e(DEBUG_TAG, "失敗");break;case TIMEOUT:// 超時Log.e(DEBUG_TAG, "超時");break;case INVALID_DEVICE_PARAMETERS://無效的參數Log.e(DEBUG_TAG, "無效的參數");break;case DEVICE_ALREADY_OPEN://端口已經打開Log.e(DEBUG_TAG, "端口已經打開");break;case INVALID_PORT_NUMBER://無效的端口號Log.e(DEBUG_TAG, "無效的端口號");break;case INVALID_IP_ADDRESS://無效的 ip 地址Log.e(DEBUG_TAG, "無效的 ip 地址");break;case INVALID_CALLBACK_OBJECT://無效的回調Log.e(DEBUG_TAG, "無效的回調");break;case BLUETOOTH_IS_NOT_SUPPORT://設備不支持藍牙Log.e(DEBUG_TAG, "設備不支持藍牙");break;case OPEN_BLUETOOTH: //請打開藍牙Log.e(DEBUG_TAG, "請打開藍牙");break;case PORT_IS_NOT_OPEN://端口未打開Log.e(DEBUG_TAG, "端口未打開");break;case INVALID_BLUETOOTH_ADDRESS://無效的藍牙地址Log.e(DEBUG_TAG, "無效的藍牙地址");break;case PORT_IS_DISCONNECT://端口連接斷開Log.e(DEBUG_TAG, "端口連接斷開");break;}} catch (RemoteException e) {e.printStackTrace();}}

這樣基本上就已經鏈接上打印設備了你就可以調用打印設備了。這些方法基本上我都卸載 PrinterUtils中,有什么的不明白的可以下載下來dome看一下

dome地址

總結

以上是生活随笔為你收集整理的USB热敏打印机(佳博)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。