Android:蓝牙打印

我必须开发一个Android平板电脑的应用程序,要求打印文件到蓝牙打印机。 通过蓝牙打印是我的应用程序最重要的function之一。 不幸的是,关于这个问题没有太多的信息,所以我想征求意见。

据我所知,无法通过Android上的蓝牙进行打印(使用本机通话),因为Android的BT协议栈没有实现BPP(基本打印configuration文件)。 做一点研究我发现了以下的select:

软件开发工具包/库

  • Sybase-iAnywhere-Blue-SDK-for-Android :支持大量BTconfiguration文件的商用SDK。 由一个大公司开发(我猜是很好的支持)。 我还没有find关于这个的很多信息。 是否有一些文档,API或如何使用这个SDK的例子? 有谁知道如何下载演示版本? (链接似乎是最后一次打破我尝试)
  • iPrint SDK:商业SDK。 他们的网站上的一些例子,但没有别的。
  • Zebralink:只适用于Zebra打印机(自然)。 其他制造商可能也有打印机的API。

Google Play应用

  • PrinterShare:商业(高级密钥)
  • 蓝牙智能打印:免费和轻量级。 声称打印到蓝牙打印机。

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

  • 你认为这是最好的select?
  • 你知道我错过了其他的select吗?
  • 我可以使用外部应用程序轻松从我的应用程序打印文件吗?
  • 我应该使用什么格式的文件才能通过蓝牙打印? (PDF,图像等)。
  • 打印机制造商和型号的任何build议?
  • 你有没有真正的Android上的蓝牙打印经验?
  • 有没有计划在不久的将来在Android上实现蓝牙打印?

在此先感谢您的帮助 ;)

Solutions Collecting From Web of "Android:蓝牙打印"

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

正如您所提到的,您目前无法在本地打印,因此您发现的替代解决scheme是您今天的select。

根据我的经验,最好使用API​​而不是外部应用程序。 最大的原因是您可以完全控制打印机的行为。 如果API是智能构build的,也很容易。 使用外部应用程序是有限的,因为您无法按照自己的意愿自定义您的打印输出。

我把你链接到的Star SDK有一个非常好的示例应用程序,它可以让你testing和定制很多打印机function,以便看到它们在运行。 每个函数都logging在源代码中。 这些命令及其参数也可以在应用程序本身作为快捷的屏幕参考,这是方便的。 最重要的是,这是有据可查的。

Star是一个很棒的公司,因为你可以得到一个免费的演示打印机供你select。

如果您select这种方式,则可以将纯文本与命令一起发送到打印机。 API处理将数据转换为打印机可以理解的内容。

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

例如,我使用CITIZEN CMP-10BT打印机,可以通过发送特定的字节序列进行控制,这些字节序列可以使用Android API轻松完成。 我甚至build立了一个框架。

问题只在于你无法确定哪些打印机型号将被最终用户使用,所以一些终极的SDK肯定会是非常需要的。

你可以下载这个组件: 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; } }