【问题标题】:Android Printing App for Zebra RW420 printer适用于 Zebra RW420 打印机的 Android 打印应用程序
【发布时间】:2012-09-26 12:32:09
【问题描述】:

我的意思是开始开发一个简单的 android 应用程序,用于使用 zebra RW420 打印机打印标签。他们有适用于 android 的 SDK,但我不知道从哪里开始。

我设想了一款只有一个屏幕的应用,它会询问标签或采购订单、我们要打印多少份,以及一个打印按钮。有人可以帮我开始。任何帮助将不胜感激。

SDK 会为我搜索打印机吗?或者我必须使用 Androids BluetoothAdapter 类...关于标签格式我必须自己创建还是可以使用 SDK 中的现有文件?

我可以设置打印机打印多份吗??

【问题讨论】:

  • @Ovi,我们已经有一个用于 Zebra 打印机的低流量标签,我们不需要进一步划分。鉴于被炸的东西的繁琐,知识越集中越好。
  • 啊,我明白了;这就说得通了。谢谢你的解释!

标签: android printing bluetooth zebra-printers


【解决方案1】:

SDK 提供蓝牙发现类。查看文档和示例。查看BluetoothDiscoverer 课程。它提供了一种查找所有蓝牙设备并在处理程序中通知您的方法。 SDK 附带一个 Developer Demo,其中有一个如何进行发现的示例:

    try {
        BluetoothDiscoverer.findPrinters(this, new DiscoveryHandler() {

            public void foundPrinter(DiscoveredPrinter printer) {
                String macAddress = printer.address;
                //I found a printer! I can use the properties of a Discovered printer (address) to make a Bluetooth Connection
            }

            public void discoveryFinished() {
                //Discovery is done
            }

            public void discoveryError(String message) {
                //Error during discovery
            }
        });
    } catch (ConnectionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

【讨论】:

    【解决方案2】:

    1) 您必须从以下线程打印:

    new Thread (new Runnable () {
      public void run () {
        enablePrintButton (false);
        Looper.prepare ();
        doConnectionTest ();
        Looper.loop ();
        Looper.myLooper ().quit ();
      }
    }).start ();
    

    2) 那么:

    private void doConnectionTest () {
        printer = connect ();
    
        if (printer != null) {
          //print
        } else {
          disconnect ();
        }
      }
    

    3) 打印方式:

    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)标签配置方法:

    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) 连接方式:

    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) 断开方法:

    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);
        }
      }
    

    另外你必须有一个卧铺班:

    public class DemoSleeper {
        private DemoSleeper () {
        }
    
        public static void sleep(int ms) {
            try {
                Thread.sleep(ms);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

    • 它对你有用吗?我想在我的 qln420 斑马模型中打印 pdf,并按照他们的建议购买了虚拟 pdf。
    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多