public class MainActivity extends AppCompatActivity {
private static final String ACTION_USB_PERMISSION = "com.android.usb.USB_PERMISSION";
private PrinterInstance lll;
private UsbManager manager;
private int printingStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UsbDevice usbDevice = showUsbList();
Log.e("213123","123333333333333");
if (usbDevice!=null){
//广播
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
manager.requestPermission(usbDevice, pendingIntent);
//PrinterInstance初始化
lll = PrinterInstance.getPrinterInstance(this, usbDevice, new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
Log.d("lll", what + "");
}
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
int what = msg.what;
// Object obj = msg.obj;
// String s = obj.toString();
// Log.e("shiiii",s);
switch (what){
case PrinterConstants.Connect.SUCCESS:
Toast.makeText(MainActivity.this,"链接成功",Toast.LENGTH_LONG).show();
initPrint();
break;
case PrinterConstants.Connect.FAILED:
Toast.makeText(MainActivity.this,"链接失败",Toast.LENGTH_LONG).show();
break;
case PrinterConstants.Connect.CLOSED:
Toast.makeText(MainActivity.this,"链接关闭",Toast.LENGTH_LONG).show();
break;
case PrinterConstants.Connect.NODEVICE:
break;
}
}
});
boolean b = lll.openConnection();
if (b){
Log.e("打印机","链接成功");
}else {
Log.e("打印机","连接失败");
}
}
}
/**
* 打印的api
*/
private void initPrint() {
if (lll==null){
return;
}
lll.initPrinter();
lll.setFont(0,3,3,0,0);
lll.setPrinter(PrinterConstants.Command.ALIGN, PrinterConstants.Command.ALIGN_CENTER);
//获得打印机的状态
int currentStatus = lll.getCurrentStatus();
switch (currentStatus){
case 0: //正常"
Log.e("再打印","再打印");
lll.printText("12312312312312312312312312321321\r\n");
// PrinterConstants.PRotate pRotate = PrinterConstants.PRotate.valueOf("10");
// lll.print(pRotate,0);
//切纸
lll.cutPaper(65, 1);
//获得打印是否完成
printingStatus =lll.getPrintingStatus(30 * 1000);
break;
case -1: //接收数据异常
break;
case -2: //缺纸
break;
case -3: //纸将打尽
break;
case -4: //打印机开盖
break;
case -5: //发送数据异常
break;
}
switch (printingStatus){
case 0: //打印完成
Toast.makeText(MainActivity.this,"打印完成",Toast.LENGTH_LONG).show();
break;
case -1: //未知异常
Toast.makeText(MainActivity.this,"未知异常",Toast.LENGTH_LONG).show();
break;
case -2: //当前打印机正在打印
Toast.makeText(MainActivity.this,"当前打印机正在打印",Toast.LENGTH_LONG).show();
break;
case -3: //打印未完成,缺纸
Toast.makeText(MainActivity.this,"打印未完成,缺纸 ",Toast.LENGTH_LONG).show();
break;
case -4: //打印未完成,纸舱盖开盖
Toast.makeText(MainActivity.this," 打印未完成,纸舱盖开盖 ",Toast.LENGTH_LONG).show();
break;
case -5: //打印未完成,与打印机通信失败
Toast.makeText(MainActivity.this," 打印未完成,与打印机通信失败 ",Toast.LENGTH_LONG).show();
break;
case -6: //数据发送失败,通信异常
Toast.makeText(MainActivity.this," 数据发送失败,通信异常 ",Toast.LENGTH_LONG).show();
break;
case -7: //接收数据格式不正确
Toast.makeText(MainActivity.this,"接收数据格式不正确 ",Toast.LENGTH_LONG).show();
break;
}
}
/***
* 获得USB的api
* @return
*/
public UsbDevice showUsbList() {
manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Log.e("集合",deviceList.size()+"");
UsbDevice vv=null;
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
StringBuilder sb = new StringBuilder();
while (deviceIterator.hasNext()) {
UsbDevice usbDevice = deviceIterator.next();
sb.append("DeviceName=" + usbDevice.getDeviceName() + "\n");
sb.append("DeviceId=" + usbDevice.getDeviceId() + "\n");
sb.append("VendorId=" + usbDevice.getVendorId() + "\n");
sb.append("ProductId=" + usbDevice.getProductId() + "\n");
sb.append("DeviceClass=" + usbDevice.getDeviceClass() + "\n");
int deviceClass = usbDevice.getDeviceClass();
if (deviceClass == 0) {
UsbInterface anInterface = usbDevice.getInterface(0);
int interfaceClass = anInterface.getInterfaceClass();
// sb.append("device Class 为0-------------\n");
// sb.append("Interface.describeContents()=" + anInterface.describeContents() + "\n");
// sb.append ("Interface.getEndpointCount()=" + anInterface.getEndpointCount() + "\n");
// sb.append("Interface.getId()=" + anInterface.getId() + "\n");
//http://blog.youkuaiyun.com/u013686019/article/details/50409421
//http://www.usb.org/developers/defined_class/#BaseClassFFh
//通过下面的InterfaceClass 来判断到底是哪一种的,例如7就是打印机,8就是usb的U盘
sb.append("Interface.getInterfaceClass()=" + anInterface.getInterfaceClass() + "\n");
Log.e("anInterface","="+anInterface.getInterfaceClass());
if (anInterface.getInterfaceClass() == 7) {
sb.append("此设备是打印机\n");
Log.e("此设备是打印机","此设备是打印机");
vv=usbDevice;
//广播
// PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
// IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
// filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
// filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
// manager.requestPermission(usbDevice, pendingIntent);
return usbDevice;
} else if (anInterface.getInterfaceClass() == 8) {
sb.append("此设备是U盘\n");
Log.e("此设备是U盘","此设备是U盘");
vv=null;
}
// sb.append("anInterface.getInterfaceProtocol()=" + anInterface.getInterfaceProtocol() + "\n");
// sb.append("anInterface.getInterfaceSubclass()=" + anInterface.getInterfaceSubclass() + "\n");
// sb.append("device Class 为0------end-------\n");
}
//
// sb.append("DeviceProtocol=" + usbDevice.getDeviceProtocol() + "\n");
// sb.append("DeviceSubclass=" + usbDevice.getDeviceSubclass() + "\n");
// sb.append("+++++++++++++++++++++++++++\n");
// sb.append(" \n");
}
//Log.d("liexingshi",sb.toString());
// textView.setText(sb);
return vv;
}
}
热敏打印PrinterInstance
最新推荐文章于 2022-05-31 10:25:11 发布
本文详细介绍了在Android平台上使用USB接口进行打印机应用开发的过程。包括如何获取USB设备列表,识别打印机,建立连接,以及实现打印功能的具体API调用。同时,文章还探讨了打印状态的监控和异常处理。
5915

被折叠的 条评论
为什么被折叠?



