首页 文章

Android:蓝牙打印

提问于
浏览
26

我必须为Android平板电脑开发一款App,要求将文件打印到蓝牙打印机 . 通过蓝牙打印是我的应用程序最重要的功能之一 . 不幸的是,关于这个主题的信息并不多,所以我想征求意见 .

据我所知,不可能在Android上使用蓝牙打印(使用本机调用),因为Android的BT Stack不实现BPP(基本打印配置文件) . 做一点研究我发现了以下替代方案:

SDKs/Libraries

  • Sybase-iAnywhere-Blue-SDK-for-Android:支持大量BT配置文件的商业SDK . 由一家大公司开发(我猜是很好的支持) . 我还没有找到很多关于这个的信息 . 是否有一些关于如何使用此SDK的文档,API或示例?有谁知道如何下载演示版? (上次我试过时链接好像坏了)

  • iPrint SDK:商业SDK . 他们网站上的一些例子,但没有别的 .

  • Zebralink:仅适用于Zebra打印机(自然) . 其他制造商也可能为其打印机提供API .

Google Play Apps

  • PrinterShare:商业(高级密钥)

  • 蓝牙智能打印:自由轻巧 . 声称打印到蓝牙打印机 .

理想情况下,我不希望被绑定到特定的品牌或打印机型号 . 现在的问题是:

  • 您认为这是最佳选择?

  • 你知道我错过的其他选择吗?

  • 我可以使用外部应用程序从我的应用程序轻松打印文件吗?

  • 我的文件应该使用哪种格式才能通过蓝牙打印? (PDF,图像等) .

  • 有关打印机制造商和型号的任何建议吗?

  • 您是否有在Android上通过蓝牙打印的真实体验?

  • 在不久的将来有没有计划在Android上实施蓝牙打印?

在此先感谢您的帮助 ;)

4 回答

  • 0

    Star Micronics有一个通过蓝牙(以及以太网和USB)进行Android打印的SDK . 你可以在这里下载:http://www.starmicronics.com/support/SDKDocumentation.aspx .

    正如您所提到的,您现在无法在本地打印,因此您找到的备用解决方案是您今天的选择 .

    根据我的经验,最好使用API而不是外部应用程序 . 最大的原因是您可以完全控制打印机行为 . 如果API是智能构建的,那也很容易 . 使用外部应用程序是有限制的,因为您无法以您希望的方式自定义打印输出 .

    我链接到你的Star SDK有一个非常好的示例应用程序,它允许您测试和自定义许多打印机功能,以查看它们的运行情况 . 每个函数都记录在源代码中 . 这些命令及其参数也可以在应用程序本身中作为快速屏幕参考使用,这很方便 . 最重要的是,它有很好的记录 .

    Star是一家伟大的合作公司,因为您可以获得自己选择的免费演示打印机用于您的开发 .

    如果选择这种方式,则可以将明文与命令一起发送到打印机 . API处理将数据转换为打印机可以理解的内容 .

  • 12

    打印到BlueTooth打印机的可能性很大程度上取决于您尝试使用的打印机型号 .

    例如,我使用 CITIZEN CMP-10BT 打印机,可以通过发送特定的字节序列来控制,这可以使用Android API轻松完成 . 我甚至在此基础上构建了一个框架 .

    问题在于,您无法确定哪些打印机型号将被最终用户使用,因此一些终极SDK绝对是非常需要的 .

  • 1

    你可以下载这个组件:https://components.xamarin.com/view/ocpp-thermal-printer-usb它在大多数USB和蓝牙通用打印机中都像一个魅力 . 我用一个类来发送最常用的esc命令 . 用法:outerInstance.mService.Write(modes.pordefecto());

    public class modes
    {
        public static byte[] condensado()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x21;
            cmd[2] |= 0x01;
    
            return cmd;
        }
    
        public static byte[] pordefecto()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x21;
            cmd[2] |= 0x00;
            return cmd;
        }
    
        public static byte[] negrita()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x21;
            cmd[2] |= 0x08;
            return cmd;
        }
    
        public static byte[] lineamenor()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x33;
            cmd[2] |= 0x14;
            return cmd;
        }
    
        public static byte[] cancelalinea()
        {
            byte[] cmd = new byte[2];
            cmd[0] = 0x1b;
            cmd[1] = 0x32;
            return cmd;
        }
    
        public static byte[] centra()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x61;
            cmd[2] |= 0x01;
            return cmd;
        }
    
        public static byte[] quitacentro()
        {
            byte[] cmd = new byte[3];
            cmd[0] = 0x1b;
            cmd[1] = 0x61;
            cmd[2] |= 0x00;
            return cmd;
        }
    
        public static byte[] codepage()
        {
            byte[] cmd = new byte[5];
            cmd[0] = 0x1f;
            cmd[1] = 0x1b;
            cmd[2] = 0x1f;
            cmd[3] |= 0xfe;
            cmd[4] |= 0x01;
            return cmd;
        }
    
        public static byte[] latino()
        {
            byte[] cmd = new byte[5];
            cmd[0] = 0x1f;
            cmd[1] = 0x1b;
            cmd[2] = 0x1f;
            cmd[3] |= 0xff;
            cmd[4] |= 0x12;
            return cmd;
        }
        public static byte[] logo()
        {
            byte[] cmd = new byte[4];
            cmd[0] = 0x1c;
            cmd[1] = 0x70;
            cmd[2] = 0x01;
            cmd[3] |= 0x00;
    
            return cmd;
        }
    }
    
  • 1

    将Printooth库用于任何类型的打印机,零配置,简单的使用和良好的文档

    https://github.com/mazenrashed/Printooth

    以下是打印简单行的示例代码:

    var printables = ArrayList<Printable>()
    var printable = Printable.PrintableBuilder()  
        .setImage(image) 
        .setNewLinesAfter(1) // To provide n lines after sentence
        .build()
    printables.add(printable)
    BluetoothPrinter.printer().print(printables)
    

    你可以继续在这里阅读:https://github.com/mazenrashed/Printooth/blob/master/README.md

相关问题