700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 硬件系列(五)-------------Android小票打印机连接 (已封装好 可直接使用)

硬件系列(五)-------------Android小票打印机连接 (已封装好 可直接使用)

时间:2019-12-26 15:29:41

相关推荐

硬件系列(五)-------------Android小票打印机连接 (已封装好 可直接使用)

一、新建MyUsbPrinterUtil工具类,代码如下:

import android.annotation.SuppressLint;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.hardware.usb.UsbConstants;import android.hardware.usb.UsbDevice;import android.hardware.usb.UsbDeviceConnection;import android.hardware.usb.UsbEndpoint;import android.hardware.usb.UsbInterface;import android.hardware.usb.UsbManager;import android.os.Build;import android.util.Log;import com.posin.usbprinter.UsbPrinter;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/*** Created by Administrator on /1/5.* 这是小票打印机工具类*/public class MyUsbPrinterUtil {private static final String TAG = "UsbPrinter";private final Context mContext;private final UsbManager mUsbManager;private volatile List<UsbDevice> mUsbPrinterList = null;private static String ACTION_USB_PERMISSION = "com.posin.usbdevice.USB_PERMISSION";private com.posin.usbprinter.UsbPrinterUtil.OnUsbPermissionCallback onPermissionCallback = null;public static final byte[] PUSH_CASH = {0x1b, 0x70, 0x00, 0x1e, (byte) 0xff, 0x00};public UsbDeviceConnection mConnection;private UsbEndpoint mEndpointIntr;final BroadcastReceiver mReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {Log.d("UsbPrinter", intent.getAction());if (MyUsbPrinterUtil.ACTION_USB_PERMISSION.equals(intent.getAction())) {UsbDevice device = (UsbDevice) intent.getParcelableExtra("device");if (intent.getBooleanExtra("permission", false)) {if (MyUsbPrinterUtil.this.onPermissionCallback != null) {MyUsbPrinterUtil.this.onPermissionCallback.onUsbPermissionEvent(device, true);}} else if (MyUsbPrinterUtil.this.onPermissionCallback != null) {MyUsbPrinterUtil.this.onPermissionCallback.onUsbPermissionEvent(device, false);}context.unregisterReceiver(this);}}};public MyUsbPrinterUtil(Context context) {this.mContext = context;this.mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);}/*** 获取所有的小票打印机设备*/public List<UsbDevice> getUsbPrinterList() {// if (Build.MODEL.substring(0, 3).equalsIgnoreCase("TPS")) {if (this.mUsbPrinterList == null) {this.mUsbPrinterList = this.findAllUsbPrinter();}return this.mUsbPrinterList;// } else {// Log.e("_ERROR", "ERROR--->Device is not support! This Demo just developer for TPS device");// return null;// }}public boolean requestPermission(UsbDevice usbDevice, com.posin.usbprinter.UsbPrinterUtil.OnUsbPermissionCallback callback) {if (!this.mUsbManager.hasPermission(usbDevice)) {IntentFilter ifilter = new IntentFilter(ACTION_USB_PERMISSION);this.mContext.registerReceiver(this.mReceiver, ifilter);PendingIntent pi = PendingIntent.getBroadcast(this.mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);this.onPermissionCallback = callback;this.mUsbManager.requestPermission(usbDevice, pi);return false;} else {return true;}}/*** 获取所有的小票打印机*/private List<UsbDevice> findAllUsbPrinter() {List<UsbDevice> result = new ArrayList();Log.d("UsbPrinter", "find usb printer...");Iterator var3 = this.mUsbManager.getDeviceList().values().iterator();while (var3.hasNext()) {UsbDevice usbDevice = (UsbDevice) var3.next();Log.d("UsbPrinter", String.format("usb %04X:%04X : device_id=%d, device_name=%s", new Object[]{Integer.valueOf(usbDevice.getVendorId()), Integer.valueOf(usbDevice.getProductId()), Integer.valueOf(usbDevice.getDeviceId()), usbDevice.getDeviceName()}));if (isUsbPrinterDevice(usbDevice)) {Log.d("UsbPrinter", String.format("usb printer %04X:%04X : device_id=%d, device_name=%s", new Object[]{Integer.valueOf(usbDevice.getVendorId()), Integer.valueOf(usbDevice.getProductId()), Integer.valueOf(usbDevice.getDeviceId()), usbDevice.getDeviceName()}));result.add(usbDevice);}}return result;}/*** 识别不同的小票打印机设备** @param usbDevice* @return*/public static boolean isUsbPrinterDevice(UsbDevice usbDevice) {/*** getVendorId()返回一个供应商id*getProductId()为设备返回一个产品ID* */int vid = usbDevice.getVendorId();int pid = usbDevice.getProductId();return vid == 5455 && pid == 5455 || vid == 26728 && pid == 1280 || vid == 26728 && pid == 1536 || vid == '衦' || vid == 1137 || vid == 1659 || vid == 1137 || vid == 1155 && pid == 1803 || vid == 17224 || vid == 7358 || vid == 6790 || vid == 1046 && pid == 20497 || vid == 10685 || vid == 4070 && pid == 33054;}/* 打开钱箱 */public boolean pushReceiptCash() {boolean canPush = false;if (this.sendUsbCommand(PUSH_CASH)) {canPush = true;} else {canPush = false;}return canPush;}//发送信息 一是打印消息,切纸,打开钱箱等@SuppressLint("NewApi")public boolean sendUsbCommand(byte[] Content) {boolean Result;synchronized (this) {int len = -1;if (mConnection != null) {len = mConnection.bulkTransfer(mEndpointIntr, Content, Content.length, 10000);}if (len < 0) {Result = false;//Log.i(TAG, "发送失败! " + len);} else {Result = true;//Log.i(TAG, "发送" + len + "字节数据");}}return Result;}@SuppressLint("NewApi")public void setUsbDevice(UsbDevice device) {if (device != null) {UsbInterface intf = null;UsbEndpoint ep = null;int InterfaceCount = device.getInterfaceCount();Log.i(TAG, "InterfaceCount:" + InterfaceCount);int j;// mDevice = device;for (j = 0; j < InterfaceCount; j++) {int i;intf = device.getInterface(j);Log.i(TAG, "接口是:" + j + "类是:" + intf.getInterfaceClass());if (intf.getInterfaceClass() == 7) {int UsbEndpointCount = intf.getEndpointCount();for (i = 0; i < UsbEndpointCount; i++) {ep = intf.getEndpoint(i);Log.i(TAG, "端点是:" + i + "方向是:" + ep.getDirection() + "类型是:" + ep.getType());if (ep.getDirection() == 0 && ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {Log.i(TAG, "接口是:" + j + "端点是:" + i);break;}}if (i != UsbEndpointCount) {break;}}}if (j == InterfaceCount) {Log.i(TAG, "没有打印机接口");return;}mEndpointIntr = ep;UsbDeviceConnection connection = mUsbManager.openDevice(device);if (connection != null && connection.claimInterface(intf, true)) {Log.i(TAG, "打开成功! ");Log.i(TAG, "connection " + connection);mConnection = connection;} else {Log.i(TAG, "打开失败! ");mConnection = null;}}}@SuppressLint("NewApi")public void CloseReceiptUsb() {if (mConnection != null) {mConnection.close();mConnection = null;}}public interface OnUsbPermissionCallback {void onUsbPermissionEvent(UsbDevice var1, boolean var2);}}

二、新建二维码打印方法类PrintCategory,代码如下:

import android.graphics.Bitmap;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.WriterException;import com.mon.BitMatrix;import java.util.Hashtable;/*** Created by Administrator on /1/6.* 这是小票打印类别类*/public class PrintCategory {/*** 生成条码、二维码** @param str 条码内容* @param type条码类型: AZTEC, CODABAR, CODE_39, CODE_93, CODE_128, DATA_MATRIX,* EAN_8, EAN_13, ITF, MAXICODE, PDF_417, QR_CODE, RSS_14,* RSS_EXPANDED, UPC_A, UPC_E, UPC_EAN_EXTENSION;* @param bmpWidth 生成位图宽,宽不能大于384,不然大于打印纸宽度* @param bmpHeight 生成位图高,8的倍数*/public Bitmap CreateCode(String str, com.google.zxing.BarcodeFormat type, int bmpWidth, int bmpHeight)throws WriterException {Hashtable<EncodeHintType, String> mHashtable = new Hashtable<EncodeHintType, String>();mHashtable.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 生成二维矩阵,编码时要指定大小,不要生成了图片以后再进行缩放,以防模糊导致识别失败BitMatrix matrix = new MultiFormatWriter().encode(str, type, bmpWidth, bmpHeight, mHashtable);int width = matrix.getWidth();int height = matrix.getHeight();// 二维矩阵转为一维像素数组(一直横着排)int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;} else {pixels[y * width + x] = 0xffffffff;}}}Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmap,具体参考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}}

三、新建打印方法类PrintReceived,调用此方法类直接打印,代码如下:

import android.graphics.Bitmap;import com.google.zxing.BarcodeFormat;import com.google.zxing.WriterException;import com.posin.usbprinter.UsbPrinter;import java.io.IOException;import java.io.UnsupportedEncodingException;/*** Created by hboxs028 on /1/30.* 这是小票打印类*/public class PrintReceipt {//打印的数据private static String cmd = "";public static boolean receiptPrint(final PrintfBean printfBean, int type) {Boolean print = (Boolean) ACache.get(App.getInstance().getApplicationContext()).getAsObject(Constants.WHETHER_PRINT);final UsbPrinter usbPrinter = App.getInstance().getUsbPrinter();final PrintCategory mPrintCategory = App.getInstance().getMpPrintCategory();if (usbPrinter == null) {ToastUtil.shortShow("小票打印机未连接");return false;} else {try {if ((print == null || !print)) {return false;}switch (type) {case TYPE_COLLECTION:cmd = productCollectFormat((CollectionPrintBean) printfBean);//收银订单/销售订单break;case TYPE_WEB_ORDER:cmd = webOrderFormat((WebOrderPrintBean) printfBean);//网络订单break;case TYPE_VIP_CARD:cmd = buyVipCardFormat((CollectionPrintBean) printfBean);break;case TYPE_TRANSFER:cmd = transferFormat((TransferPrintBean) printfBean);//交接班break;case TYPE_STOCK:cmd = strokFlowFormat((StockFlowPrintBean) printfBean);//货流通知break;case MEMBER_RECHARGE:cmd = memberRechargeFormat((MemberRechargePrintBean) printfBean);break;default:break;}new Thread() {@Overridepublic void run() {super.run();try {usbPrinter.resetInit();usbPrinter.selectAlignment(UsbPrinter.ALIGNMENT.LEFT);//设置对齐方式Bitmap qrBitMap = null;qrBitMap = mPrintCategory.CreateCode("", BarcodeFormat.QR_CODE, 256, 256);//设置打印二维码的数据和宽高Bitmap barBitMap = mPrintCategory.CreateCode("01050943308072", BarcodeFormat.CODE_128, 350, 40);//设置条形码的数据和宽高usbPrinter.selectFONT(UsbPrinter.FONT.FONT_A);//设置字体usbPrinter.selectBold(false);//设置是否加粗usbPrinter.selectUnderlined(false);//设置是否有下划线usbPrinter.doubleFontSize(false, false);//设置是否放大usbPrinter.setLineSpace(0);//设置间距usbPrinter.printString(cmd);//打印正文// usbPrinter.selectAlignment(UsbPrinter.ALIGNMENT.RIGHT);//设置对齐方式// usbPrinter.printBitmapByLine(barBitMap);//打印条形码// usbPrinter.printBitmapByLine(qrBitMap);//打印二维码usbPrinter.walkPaper(3);//走纸usbPrinter.cutPaper();//切纸} catch (IOException e) {e.printStackTrace();} catch (WriterException e) {e.printStackTrace();} finally {try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}.start();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return true;}}//打印测试public boolean printReceiptTest() {final UsbPrinter usbPrinter = App.getInstance().getUsbPrinter();final PrintCategory mPrintCategory = App.getInstance().getMpPrintCategory();if (usbPrinter == null) {ToastUtil.shortShow("小票打印机未连接");return false;} else {new Thread() {@Overridepublic void run() {super.run();try {usbPrinter.resetInit();usbPrinter.selectAlignment(UsbPrinter.ALIGNMENT.LEFT);//设置对齐方式Bitmap qrBitMap = null;qrBitMap = mPrintCategory.CreateCode("", BarcodeFormat.QR_CODE, 256, 256);Bitmap barBitMap = mPrintCategory.CreateCode("01050943308072", BarcodeFormat.CODE_128, 350, 40);usbPrinter.selectFONT(UsbPrinter.FONT.FONT_A);usbPrinter.selectBold(false);usbPrinter.selectUnderlined(false);usbPrinter.doubleFontSize(false, false);usbPrinter.setLineSpace(0);usbPrinter.printString("小票打印机打印测试\n");// usbPrinter.printBitmapByLine(barBitMap);// usbPrinter.selectAlignment(UsbPrinter.ALIGNMENT.RIGHT);// usbPrinter.printBitmapByLine(qrBitMap);usbPrinter.walkPaper(3);usbPrinter.cutPaper();} catch (IOException e) {e.printStackTrace();} catch (WriterException e) {e.printStackTrace();} finally {try {sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}.start();return true;}}}

注:如需要,可直接使用打印测试里面的代码,第一个方法是自己需要实现的方式,可根据打印测试里面的代码去实现自己想要的方式

四、连接方式

/*** 连接打印机*/

public static MyUsbPrinterUtil myUsbPrinterUtil = null;private static List<UsbDevice> devices;public static UsbPrinter usbPrinter = null;public static PrintCategory mpPrintCategory = null;

private static ArrayList<UsbDevice> receiptDeviceList;public static UsbDevice receiptUSBDevice;

/*** 连接打印机*/public static void getReceiptDevice() {if (usbPrinter == null) {myUsbPrinterUtil = new MyUsbPrinterUtil(mContext);mpPrintCategory = new PrintCategory();devices = myUsbPrinterUtil.getUsbPrinterList();//获取所有打印设备receiptDeviceList = new ArrayList<>();for (UsbDevice usbDevice : devices) {if (myUsbPrinterUtil.isUsbPrinterDevice(usbDevice)) {myUsbPrinterUtil.requestPermission(usbDevice, null);//请求权限/*** 优库打印机:pid=33054 vid=4070* 君时达打印机:pid=1803 vid=1155* 票据打印机:pid=20497 vid=1046* 佳博打印机:pid=1536 vid=26728*/if (usbDevice.getVendorId() == 26728 && usbDevice.getProductId() == 1536 || usbDevice.getVendorId() == 4070 && usbDevice.getProductId() == 33054 ||usbDevice.getVendorId() == 1155 && usbDevice.getProductId() == 1803 || usbDevice.getVendorId() == 1046 && usbDevice.getProductId() == 20497) {receiptDeviceList.add(usbDevice);}}}if (receiptDeviceList.isEmpty()) {ToastUtil.shortShow(mContext.getResources().getString(R.string.no_connected));return;}receiptUSBDevice = receiptDeviceList.get(0);if (receiptUSBDevice == null) {receiptHandler.sendEmptyMessage(4);return;}try {usbPrinter = new UsbPrinter(mContext, receiptUSBDevice);//打印对象/*** 设置全局变量*/App.getInstance().setUsbPrinter(usbPrinter);App.getInstance().setMyUsbPrinterUtil(myUsbPrinterUtil);App.getInstance().setReceiptUSBDevice(receiptUSBDevice);App.getInstance().setMpPrintCategory(mpPrintCategory);receiptHandler.sendEmptyMessage(1);} catch (IOException e) {e.printStackTrace();}}}

五、handle

// 用于接受连接状态消息的 Handler@SuppressLint("HandlerLeak")public static Handler receiptHandler = new Handler() {@SuppressLint("ShowToast")@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:ToastUtil.shortShow("连接成功");isConnected = true;Constants.ISCONNECTED = isConnected;break;case 2:isConnected = false;ToastUtil.shortShow(mContext.getResources().getString(R.string.conn_failed));break;case 3:isConnected = false;Constants.ISCONNECTED = isConnected;Log.i(TAG, "连接关闭!");break;case 4:isConnected = false;ToastUtil.shortShow(mContext.getResources().getString(R.string.conn_no));break;case 0:ToastUtil.shortShow("打印通信正常");break;case -1:ToastUtil.shortShow("打印机通信异常,请检查蓝牙连接");vibrator();break;case -2:ToastUtil.shortShow("打印缺纸");vibrator();break;case -3:ToastUtil.shortShow("打印机开盖");vibrator();break;default:break;}updateButtonState(isConnected);//更新打印机状态}};

六、断开打印机

/*** 断开打印机连接*/public static void breakPrinter() {if (usbPrinter != null) {/*** 断开打印设备的连接*/usbPrinter.close();usbPrinter = null;myUsbPrinterUtil.CloseReceiptUsb();myUsbPrinterUtil = null;mpPrintCategory = null;receiptDeviceList = null;receiptUSBDevice = null;App.getInstance().setUsbPrinter(null);App.getInstance().setMyUsbPrinterUtil(null);App.getInstance().setReceiptUSBDevice(null);App.getInstance().setMpPrintCategory(null);receiptHandler.sendEmptyMessage(3);ToastUtil.shortShow("已断开连接");} else {ToastUtil.shortShow("打印机未连接");}if (isConnected) {receipt_device_name.setText("设备名称: " + "小票打印机");receipt_print_state.setText(mContext.getResources().getString(R.string.on_line));} else {receipt_device_name.setText("设备名称:未连接");receipt_print_state.setText(mContext.getResources().getString(R.string.off_line));}}

以上就是连接的主要方法了,还有一些功能就根据自己的需要去实现了,只需要连接方法就基本解决掉了小票打印机的连接了

下面直接贴全部代码:

代码是在一个fragment里面点击按钮去连接,如需要啊activity中去连接,可直接设置,直接看点击事件里面的步骤就可实现。

import android.annotation.SuppressLint;import android.content.Context;import android.hardware.usb.UsbDevice;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.RelativeLayout;import android.widget.TextView;import com.posin.usbprinter.UsbPrinter;import java.io.IOException;import java.util.ArrayList;import java.util.List;/*** 这是设置的打印小票机的设置*/public class SettingBillPrinterFragment extends Fragment implements OnClickListener {//usb授权设置public UsbAdmin mUsbAdmin = null;private App app;private static TextView receipt_device_name;private RelativeLayout receipt_print_connect;private static TextView receipt_print_state;private RelativeLayout receipt_off_print;private RelativeLayout receipt_examine_print_state;private RelativeLayout receipt_print_test;private static Context mContext;private static ArrayList<UsbDevice> receiptDeviceList;public static UsbDevice receiptUSBDevice;public static boolean isConnected = false;protected static final String TAG = "SettingActivity";/***佳博小票打印机**/public static MyUsbPrinterUtil myUsbPrinterUtil = null;private static List<UsbDevice> devices;public static UsbPrinter usbPrinter = null;public static PrintCategory mpPrintCategory = null;// private Subscription subscribe;@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_setting_printer, container, false);receipt_device_name = view.findViewById(R.id.receipt_device_name);receipt_print_connect = view.findViewById(R.id.receipt_print_connect);receipt_print_state = view.findViewById(R.id.receipt_print_state);receipt_off_print = view.findViewById(R.id.receipt_off_print);receipt_examine_print_state = view.findViewById(R.id.receipt_examine_print_state);receipt_print_test = view.findViewById(R.id.receipt_print_test);receipt_print_connect.setOnClickListener(this);//连接打印机receipt_off_print.setOnClickListener(this);//断开打印机receipt_examine_print_state.setOnClickListener(this);//开钱箱receipt_print_test.setOnClickListener(this);//打印测试mContext = getActivity();updateButtonState(isConnected);app = (App) getActivity().getApplication();// mUsbAdmin = app.getUsbAdmin();ACache.get(getActivity()).put(Constants.WHETHER_PRINT, true);// myUsbPrinterUtil = App.getInstance().getMyUsbPrinterUtil();// usbPrinter = App.getInstance().getUsbPrinter();// receiptUSBDevice = App.getInstance().getReceiptUSBDevice();// subscribe = RxBus.getDefault().toObservable(StateEvent.class).subscribe(new Action1<StateEvent>() {// @Override// public void call(StateEvent printEvent) {//isConnected = printEvent.isConnected();//Log.e("freak", isConnected + "bbb");//Log.e("freak", printEvent.isConnected() + "aaa");//updateButtonState(isConnected);// }// });return view;}@Overridepublic void onStart() {super.onStart();updateButtonState(isConnected);}@Overridepublic void onResume() {super.onResume();}@Overridepublic void onClick(View v) {switch (v.getId()) {//连接打印机case R.id.receipt_print_connect:getReceiptDevice();break;//断开打印机case R.id.receipt_off_print:breakPrinter();break;//开钱箱case R.id.receipt_examine_print_state://if (HardwareUtil.pushCash(mUsbAdmin)) {//ToastUtil.shortShow("测试结果:钱箱打开成功...");//} else {//ToastUtil.shortShow("测试结果:钱箱打开失败...");//}if (usbPrinter == null) {ToastUtil.shortShow("小票打印机未连接");} else {myUsbPrinterUtil.setUsbDevice(receiptUSBDevice);if (myUsbPrinterUtil.pushReceiptCash()) {ToastUtil.shortShow("测试结果:钱箱打开成功...");myUsbPrinterUtil.CloseReceiptUsb();} else {ToastUtil.shortShow("测试结果:钱箱打开失败...");}}break;//打印测试case R.id.receipt_print_test:if (usbPrinter != null) {// myUsbPrinterUtil.setUsbDevice(receiptUSBDevice);new PrintReceipt().printReceiptTest();//new PrintReceipt().printReceiptTest(usbPrinter,mpPrintCategory);} else {ToastUtil.shortShow("小票打印机未连接");}break;}}/*** 断开打印机连接*/public static void breakPrinter() {if (usbPrinter != null) {/*** 断开打印设备的连接*/usbPrinter.close();usbPrinter = null;myUsbPrinterUtil.CloseReceiptUsb();myUsbPrinterUtil = null;mpPrintCategory = null;receiptDeviceList = null;receiptUSBDevice = null;App.getInstance().setUsbPrinter(null);App.getInstance().setMyUsbPrinterUtil(null);App.getInstance().setReceiptUSBDevice(null);App.getInstance().setMpPrintCategory(null);receiptHandler.sendEmptyMessage(3);ToastUtil.shortShow("已断开连接");} else {ToastUtil.shortShow("打印机未连接");}if (isConnected) {receipt_device_name.setText("设备名称: " + "小票打印机");receipt_print_state.setText(mContext.getResources().getString(R.string.on_line));} else {receipt_device_name.setText("设备名称:未连接");receipt_print_state.setText(mContext.getResources().getString(R.string.off_line));}}/*** 连接打印机*/public static void getReceiptDevice() {if (usbPrinter == null) {myUsbPrinterUtil = new MyUsbPrinterUtil(mContext);mpPrintCategory = new PrintCategory();devices = myUsbPrinterUtil.getUsbPrinterList();//获取所有打印设备receiptDeviceList = new ArrayList<>();for (UsbDevice usbDevice : devices) {if (myUsbPrinterUtil.isUsbPrinterDevice(usbDevice)) {myUsbPrinterUtil.requestPermission(usbDevice, null);//请求权限/*** 优库打印机:pid=33054 vid=4070* 君时达打印机:pid=1803 vid=1155* 票据打印机:pid=20497 vid=1046* 佳博打印机:pid=1536 vid=26728*/if (usbDevice.getVendorId() == 26728 && usbDevice.getProductId() == 1536 || usbDevice.getVendorId() == 4070 && usbDevice.getProductId() == 33054 ||usbDevice.getVendorId() == 1155 && usbDevice.getProductId() == 1803 || usbDevice.getVendorId() == 1046 && usbDevice.getProductId() == 20497) {receiptDeviceList.add(usbDevice);}}}if (receiptDeviceList.isEmpty()) {ToastUtil.shortShow(mContext.getResources().getString(R.string.no_connected));return;}receiptUSBDevice = receiptDeviceList.get(0);if (receiptUSBDevice == null) {receiptHandler.sendEmptyMessage(4);return;}try {usbPrinter = new UsbPrinter(mContext, receiptUSBDevice);//打印对象/*** 设置全局变量*/App.getInstance().setUsbPrinter(usbPrinter);App.getInstance().setMyUsbPrinterUtil(myUsbPrinterUtil);App.getInstance().setReceiptUSBDevice(receiptUSBDevice);App.getInstance().setMpPrintCategory(mpPrintCategory);receiptHandler.sendEmptyMessage(1);} catch (IOException e) {e.printStackTrace();}}}// 用于接受连接状态消息的 Handler@SuppressLint("HandlerLeak")public static Handler receiptHandler = new Handler() {@SuppressLint("ShowToast")@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:ToastUtil.shortShow("连接成功");isConnected = true;Constants.ISCONNECTED = isConnected;break;case 2:isConnected = false;ToastUtil.shortShow(mContext.getResources().getString(R.string.conn_failed));break;case 3:isConnected = false;Constants.ISCONNECTED = isConnected;Log.i(TAG, "连接关闭!");break;case 4:isConnected = false;ToastUtil.shortShow(mContext.getResources().getString(R.string.conn_no));break;case 0:ToastUtil.shortShow("打印通信正常");break;case -1:ToastUtil.shortShow("打印机通信异常,请检查蓝牙连接");vibrator();break;case -2:ToastUtil.shortShow("打印缺纸");vibrator();break;case -3:ToastUtil.shortShow("打印机开盖");vibrator();break;default:break;}updateButtonState(isConnected);//更新打印机状态}};static int count = 0;public static void vibrator() {count++;PrefUtils.setInt(mContext, "count3", count);Log.e(TAG, "" + count);}/*** 更新状态** @param isConnected*/public static void updateButtonState(boolean isConnected) {if (isConnected) {receipt_device_name.setText("设备名称: " + "小票打印机");receipt_print_state.setText(mContext.getResources().getString(R.string.on_line));} else {receipt_print_state.setText(mContext.getResources().getString(R.string.off_line));receipt_device_name.setText("设备名称:未连接");}PrefUtils.setBoolean(mContext, Constants.CONNECTSTATE, isConnected);}public void onDestroy() {super.onDestroy();// subscribe.unsubscribe();}}

最后,这个方法是需要使用打印sdk去实现的,如果真实需要实现打印sdk的朋友,可以留言给我,我给你们下载地址,毕竟自己在小票打印连接的坑了蹲了很久,给一些同样掉进这个坑里面的开发朋友一些帮助!

小票打印机sdk下载地址:/download/freak_csh/10836232

demo:硬件系列导航与所有硬件博文的demo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。