【问题标题】:USB Printing for DOT Matrix POS printer点阵POS打印机的USB打印
【发布时间】:2018-05-02 10:05:05
【问题描述】:

我尝试使用 usbmanager 打印到 USB 打印机,该应用程序可以检测到打印机设备,但是当我运行它时它不打印。没有错误,所有传递的数据都正常。 打印机:Bixolon SRP 275III 类型:USB

private async void printReciept()
 {
 UsbManager m_usbManager;
            m_usbManager = (UsbManager)Application.Context.GetSystemService(Context.UsbService);

            var deviceList = m_usbManager.DeviceList;
            IEnumerable<UsbDevice> deviceIterator = deviceList.Values.AsEnumerable();
            UsbDevice m_usbdevice = null;

            if (deviceIterator.Count() > 0)
            {
                var device = deviceIterator.ElementAt(0);
                m_usbdevice = device;
                string ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
                var mPermissionIntent = PendingIntent.GetBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
                m_usbManager.RequestPermission(m_usbdevice, mPermissionIntent);

                    UsbDeviceConnection deviceConnection = null;
                    try
                    {
                        using (var usbInterface = m_usbdevice.GetInterface(0))
                        {
                            using (var usbEndpoint = usbInterface.GetEndpoint(0))
                            {
                             mEndPoint = usbEndpoint;
                                deviceConnection = m_usbManager.OpenDevice(m_usbdevice);

                                byte[] bytesHello = Encoding.UTF8.GetBytes("Hello");


                            deviceConnection.BulkTransfer(usbEndpoint, bytesHello, bytesHello.Length, 0);
                         }
                    }
                    }
                    catch
                    {
                    }


            }
       }

【问题讨论】:

  • 你是如何传递意图的,如果可能的话,还有 logcat
  • 那些 Bixolon 打印机有一个基于 Java 的 SDK(包括用于打印 PDF 和图像的 ABI 本机库),它们需要被初始化。您也许可以查看他们的 Linux CUPS 驱动程序以确定所需的初始化和不同打印功能的转义序列,但围绕他们的 .Jar 库创建 Xamarin.Android 绑定库会容易得多

标签: c# android xamarin


【解决方案1】:

您正在将要打印的字符串直接发送到批量端点,或者实际上您正在批量传输到找到的第一个端点而不知道它的任何特征?我认为它比这要复杂一些。

首先尝试找出您的打印机是否支持 USB 打印类或某些专有实现。你可以很容易地做到这一点,例如通过将打印机连接到 Windows PC 并从设备管理器、usbdeview 或其他类似应用程序中查看。

如果它支持打印类,请阅读this 文档并在此基础上实现您的驱动程序(或使用您在 Android 中可能已经拥有的驱动程序)。如果它只支持专有实现,则需要获取它的规范或进行一些逆向工程。

您可能需要了解PCL,这可能也是需要的。

【讨论】:

  • 到目前为止,我发现.. 第一个端点是 IN...,第二个端点是 OUT.. iv'e 尝试向第二个端点发送一个字符串..仍然什么都没有……我读了一些代码并反编译了一些应用程序……只是想看看打印是如何工作的……然而……什么都没有……
  • 您需要找出您的打印机使用的语言并通过端点发送该语言。这个答案:stackoverflow.com/a/1519308/4025606 与我的非常相似,但也指出了另一个文档。
  • 我现在正在学习,他在你给我的链接上写文档..它有很大的帮助..我也发现了这个......itechart.com/blog/…你能告诉我你对那个的看法吗..如果我仍然在正确的道路上?..谢谢
  • 是的,这似乎是对 USB 基础知识的合理解释。如果您想更深入地了解 USB,您可以在 USB.org 上找到很多规格和资料。
  • 我得到了更新,我现在可以打印了,但打印机的 BulkTransfer 似乎有最大数量的要接收的字节,并且通过的剩余字节将在下一次 BulkTransfer 中打印。
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多