Android打印机相关开发总结

最近项目需求,购买了一个带有打印小票功能的搭载安卓系统的机器,想要开发一款app,联网之后可以打印小票,类似于美团商家等打印外卖订单或者在电影院在线取票打印订单,但是由于开始的时候找错了方向,所以耽误了一些时间,但是也是有收获的,把这些总结记录下来:

首先要说得是:如果你也有这样的需求,你应该去购买的产品的商家那里找到相关的开发文档,对于如何操作打印机,如何打印等等开发文档都会有详细的解释。

我之前没有注意到这些,所以去查了google的官方文档,在官方文档里面找到了android.print和android.printerservice这两个包,但是这两个包下的内容其实是提供了android设备和打印机之间连接的桥梁,并没有提供具体的实现方式。所以,如果你要开发的是android设备和打印机之间的连接,同时对具体的打印需求进行封装的话,下面的内容可能对你有帮助。这里并没有实际的代码,只是对官方文档做了一些翻译,同时加上了一些思考,但是csdn的排版并不好用,所以,你可以查看我的oneNote笔记,我已经把这些内容做了共享:https://1drv.ms/u/s!AiWYIF5hjJuZnnYhil_WL5yOhAhn,以下是对android打印机服务做出的总结:

打印机服务:
(1)打印机服务官方文档位于android.printservice包下:
(2)官方说明:
这个包下的相关类提供了实现打印服务的类,打印服务是知道如何通过一些标准协议与打印机通话的插件组件。这些服务是系统和打印机之间的桥梁。因此,打印机和打印机协议的具体实现是从系统中分解出来的,并且可以独立开发和更新。
一个打印服务的实现应该继承自 PrintService 并且实现其抽象方法,并且一个打印服务报讯遵循管理 PrintJobs 的合同。
系统负责根据服务管理的打印机是否存在活动的打印作业来启动和停止打印服务。打印服务也应该及时执行打印机发现以确保良好的用户体验。打印机运行期间系统和打印服务之间的交互由系统请求时打印服务创建的 PrinterDiscoverySession 进行封装。

PrintDocument类
修饰:public final class
继承自:Object
概要:这个类从打印服务的角度来监控打印文件,它公开API以查询文档并获取其数据

PrintDocumentInfo概述:
修饰符:public final class
继承自:Object
简介:该类为了打印目的封装了关于文档的信息,此元数据由平台的和打印服务,与打印机交互的组件使用,例如:这个类包含了它描述的文档中包含的页面数量,并且这个页面显示给用户,允许用户选择要打印的范围,另外,打印服务可以根据内容类型优化打印过程,例如文档或照片。
此类的打印实例由打印应用程序创建并传递给PrintDocumentAdapter.LayoutResultCallback.onLayoutFinished( PrintDocumentInfo, boolean) ,成功后回调给PrintDocumentAdapter.onLayout(PrintAttributes, PrintAttributes, android.os.CancellationSignal, PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle).

PrintDiscoverySession:
修饰符:public abstract class
继承自:Object
简介:这个类在打印机发现期间封装打印服务和系统之间的交互,在发现打印机期间,你负责添加发现的打印机,删除先前添加的消失的打印机,并更新已添加的打印机。
在本次会话的整个生命周期中,你可能会被要求多次启动和停止执行打印机发现,你将会收到onStartPrinterDiscovery(List)来启动打印机或者收到onStopPrinterDiscovery()来停止打印机,当系统不再对通过此会话发现的打印机感兴趣时,你将会收到onDestroy()的呼叫,此时系统将不再调用会话,所有会话方法都不会执行任何操作。
发现的打印机通过addPrinters(List)添加,通过调用removePrinters(List)删除添加的消失的打印机,添加的打印机的属性或功能已更改通过调用addPrinters(List)更新,此绘画中添加的打印机可以通过getPrinters()获取,其中返回的打印机将是会话期间报告的打印机的最新快照,打印机不会在绘画中持续存在。

如果您需要更新某些打印机,系统将调用onValidatePrinters(List)。您可能添加了打印机而未指定其功能。这使您可以避免查询所有发现的打印机的功能,而只在必要时才查询打印机的功能。例如,如果用户选择了打印机,系统会要求您更新打印机。验证打印机时,您不需要提供打印机的功能,但可以这样做。

如果系统有兴趣不断更新打印机的状态,您将接到对onStartPrinterStateTracking(PrinterId)的调用,之后您必须尽最大努力保持系统更新以了解打印机状态和功能的变化。如果在添加打印机时没有提供打印机功能,您也必须更新打印机功能,否则打印机将被忽略。当系统不再需要获取打印机的更新时,您将收到对onStopPrinterStateTracking(PrinterId)的调用

注意:这个类中的所有回调都在主应用程序线程上执行。您还必须在主应用程序线程上调用此类的任何方法。

PrintInfo:
修饰符:public final class
继承自:Object
简介:这个类表示打印机的描述,这个类的实例由打印服务创建,以向系统报告它们管理的打印机,此类的信息有两个主要组成部分,即打印机属性,如名称,id,状态,说明和打印机功能,它们描述了打印机支持的各种打印模式,如介质尺寸,边距等。一旦构建,对象是不可变的。

PrinterCapabilitiesInfo:打印机功能类
修饰符:public final class
继承自:Object
简介:描述打印机的功能,相关属性使用Builder设计模式,可以查看PrinterCapabilitiesInfo.Builder类下的相关方法

PrinterAttributes及其相关子类
PrinterAttributes
修饰符:public final class
继承自:Object
简介:这个类表示打印机作业的属性,这些属性描述了打印机内容应该如何布置,例如,打印属性可以规定内容应该以300DPI(每英寸点数)分辨率的字母大小进行布局,在所有边上都有10个铣刀(千分之一英寸)的边距,并且是黑色和白色。

PrinterAttributes内部类PrinterAttributes.Builder简介:
修饰符:public static final class
继承自:Object
简介:用于创建PrinterAttributes的生成器

PrinterAttributes.Margins类简介:
修饰符:public static final class
继承自Object
简介:这个类定义了内容边距,边距定义内容周围的空白区域,左边距定义内容左边的空白量等等。
字段:
PrinterAttributes.Margin NO_MARGINS
构造方法:PrinterAttributes.Margins(int leftMils,int topMils,int rightMils,int bottomMils)

PrinterAttributes.MediaSize
修饰符:public static final class
继承自:Object
简介:这个类指定媒体大小,媒体尺寸是打印内容的媒体尺寸
字段:这个类下定义了很多字段,主要都是用于定义打印媒介的尺寸,具体可以查看文档

PrintAttributes.Resolution
修饰符:public static final class
继承自:Object
简介:这个类指定DPI支持的分辨率,分辨率定义在目标媒介的水平或垂直方向上,一英寸上可以防止多少个具有不同颜色的点,例如:具有600DPI的打印机可以生成具有300DPI分辨率的打印机的高质量图像。

PrinterId
修饰符:public final class
继承自:Object
简介:这个类表示打印机的唯一id

PrintJob:
修饰符:public final class
继承自:Object
简介:这个类从应用程序的角度来表示一个打印作业,它包含对其 执行操作的行为方法以及查询其状态的方法,打印作业状态的快照由PrintJobInfo类表示,打印作业的状态可能随时间而改变,应用程序在创建打印作业或查询其打印作业时接受此类的实例。

PrintJobId
修饰符:public static final
继承自:Object
简介:这个类表示打印作业的id

CSDN上的表格是真的不会编辑,所以这里只有类的解释,具体的方法还是通过笔记本看吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值