1) You must print from a stream, for example:
new Thread (new Runnable () { public void run () { enablePrintButton (false); Looper.prepare (); doConnectionTest (); Looper.loop (); Looper.myLooper ().quit (); } }).start ();
2) Then:
private void doConnectionTest () { printer = connect (); if (printer != null) {
3) Printing Method:
private void sendTestLabel () { try { ZebraPrinterLinkOs linkOsPrinter = ZebraPrinterFactory.createLinkOsPrinter (printer); PrinterStatus printerStatus = (linkOsPrinter != null) ? linkOsPrinter.getCurrentStatus () : printer.getCurrentStatus (); if (printerStatus.isReadyToPrint) { byte[] configLabel = getConfigLabel (); connection.write (configLabel); setStatus ("Sending Data", Color.BLUE); } else if (printerStatus.isHeadOpen) { setStatus ("Printer Head Open", Color.RED); } else if (printerStatus.isPaused) { setStatus ("Printer is Paused", Color.RED); } else if (printerStatus.isPaperOut) { setStatus ("Printer Media Out", Color.RED); } DemoSleeper.sleep (1500); if (connection instanceof BluetoothConnection) { String friendlyName = ((BluetoothConnection) connection).getFriendlyName (); setStatus (friendlyName, Color.MAGENTA); DemoSleeper.sleep (500); } } catch (ConnectionException e) { setStatus (e.getMessage (), Color.RED); } finally { disconnect (); } }
4) Label setting method:
private byte[] getConfigLabel () { byte[] configLabel = null; try { PrinterLanguage printerLanguage = printer.getPrinterControlLanguage (); SGD.SET ("device.languages", "zpl", connection); if (printerLanguage == PrinterLanguage.ZPL) { configLabel = "^XA^FO17,16^GB379,371,8^FS^FT65,255^A0N,135,134^FDTEST^FS^XZ".getBytes(); } else if (printerLanguage == PrinterLanguage.CPCL) { String msg = setPopratnica (); msg = format (msg); configLabel = msg.getBytes ("windows-1250"); } } catch (Exception e) { } return configLabel; }
5) Connection Method:
public ZebraPrinter connect () { setStatus ("Connecting...", Color.YELLOW); connection = null; connection = new BluetoothConnection (getBluetoothAddressKey ()); try { connection.open (); setStatus ("Connected", Color.GREEN); } catch (ConnectionException e) { setStatus ("Comm Error! Disconnecting", Color.RED); DemoSleeper.sleep (1000); disconnect (); } ZebraPrinter printer = null; if (connection.isConnected ()) { try { printer = ZebraPrinterFactory.getInstance (connection); setStatus ("Determining Printer Language", Color.YELLOW); String pl = SGD.GET ("device.languages", connection); setStatus ("Printer Language " + pl, Color.BLUE); } catch (ConnectionException e) { setStatus ("Unknown Printer Language", Color.RED); printer = null; DemoSleeper.sleep (1000); disconnect (); } catch (ZebraPrinterLanguageUnknownException e) { setStatus ("Unknown Printer Language", Color.RED); printer = null; DemoSleeper.sleep (1000); disconnect (); } } return printer; }
6) Disconect Method:
public void disconnect () { try { setStatus ("Disconnecting", Color.RED); if (connection != null) { connection.close (); } setStatus ("Not Connected", Color.RED); } catch (ConnectionException e) { setStatus ("COMM Error! Disconnected", Color.RED); } finally { enablePrintButton (true); } }
In addition, you should have a sleeping class:
public class DemoSleeper { private DemoSleeper () { } public static void sleep(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { e.printStackTrace(); } } }