浅谈Android Print Service

    Google 为了支持移动设备打印功能在Android4.4加入了printservice打印框架。既如果你想让你的打印机能够在Android系统上完成打印工作,那么一种可选的方式就是按照Google提供的打印框架来实现相关打印机的各种功能,包括发现打印机、预览、设置打印参数、打印等工作。当然,在Android设备上实现打印功能的技术多种多样,早在Google推出打印框架之前就已经有软件能够让Android设备实现打印功能,比如Mopria,还有诸如将windows设备作为服务器,Android设备将数据发送到Windows,Windows负责将数据发送到具体打印机打印,总之就是要实现和打印机进行消息通信既可完成打印工作。只是Google提供了打印框架后,遵循这个框架可以更方便的实现打印功能,Android用户在使用的时候也更方便而已。
 
    Android提供的打印框架只是一个空架子,只是提供了一种标准的规则而已,并没有实现任何具体的打印功能,打印机厂商在Android上开发自己打印机打印功能的时候,必须自行完善代码流程。如上图,Android打印框架有以下几个重要的概念:
  1. PrintDocument 代表一个待打印的文件。里面包含了打印机id(也就是这个待打印的文件应该由哪个打印机去完成打印工作),PrintDocumentInfo(framework中打印框架中的类,指待打印文件的详细描述信息,如名称、页数、类型、大小等)。
  2. PrintDiscoverySession 封装了打印机发现过程中一个打印服务和系统的交互操作翻译成白话就是:发现具体打印机的动作要自己去写,具体怎么查找打印机Android系统不管,但是你找到了打印机就得告诉Android系统,系统得知道它已经具备了这个打印机的打印能力,在后续诸如用户点击了一张图片右上角的菜单按钮或分析按钮,系统就能显示相关界面,用以告诉用户你这个图片可以用某某打印机打印出来。
  3. PrintJob 代表一个打印任务。就是当用户已经选择了一个打印机开始了打印工作,但是还没完成,那么这就是一个打印任务,Android还提供了查询任务进度、终止任务等功能。
  4. PrintService 打印服务的基础类,并且是一个抽象类,任何遵循Android打印框架的打印插件服务都必须实现它。具体实现包括复写onCreatePrinterDiscoverySession 方法以实现发现打印机等功能。
 
    在具体的问题中来分析打印框架的具体实现。
    当安装了一个打印插件服务程序后,就可以在Android 设置界面里看到该打印服务,这是如何做到的?
    要让自己开发的打印插件服务显示在系统设置菜单里很简单:
  1. 新建一个类ActPrintService,extends PrintService,必须实现onCreatePrinterDiscoverySession、onRequestCancelPrintJob、onPrintJobQueued三个方法。
  2. AndroidManifest.xml中配置这个服务类,配置信息如下图

   必须指定android:permission="android.permission.BIND_PRINT_SERVICE",否则Android系统会忽略这个打印服务。

  必须添加action android:name="android.printservice.PrintService",否则Android系统会忽略这个打印服务。

  实际上Android设置在打开扫描插件列表页面的时候会根据以上的条件查找所有满足条件的服务,并认为它们是打印服务,即使我添加的打印服务里所有的实现都是空的。具体代码在framework中的UserState.java中

至于最后一个meta-data,printservice是自定义的xml文件,它指定了一个打印服务所具备的更多能力,这些能力都需要自行开发,具体参数含义见下图:

以上,即使什么都不实现,只是简单的继承PrintService类,配置AndroidManifest,也能在Android系统的设置菜单显示该打印插件应用。

   Android系统中的"默认打印服务"程序,实现了什么功能?

   默认打印服务程序在Android P中的代码位于packages/services/BuiltInPrintService中,是系统默认集成的打印插件服务。同样的,BuiltInPrintService也遵循Android的打印框架规则,继承PrintService类,并在PrintService类中实现PrintDiscoverySession 去发现打印机,如果发现了具体打印机将将该打印机的信息提交给系统。BuiltInPrintService一启动就会去查找MDNS、P2P类型的打印机:

   那么MDNS和P2P类型的打印机具体指什么打印机呢?

   MdnsDiscovery这个具体类负责查找mdns类型打印机,代码中的官方注释很简陋:Search the local network for devices advertising IPP print services

   同理,P2pDiscovery这个具体类负责查找p2p类型的打印机,代码中的注释:Discover previously-added P2P devices, if any.

   猜测大概是去查找类似网络打印机,比如支持WiFi传输协议的打印机。由于公司只有一台很老的HP打印机,不支持WiFi也不支持蓝牙,没办法具体调试代码,所以就没有再深入调查这个应用了。

   有兴趣的可以点击此处下载Android默认打印服务源代码分析。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mopria Print Service 2.3推出新的移动打印功能,支持用户使用 安卓设备的“分享”功能进行打印 拓展移动打印功能,方便用户使用其最喜爱的应用程序中的“分享”选项打印照片、文本 、网页等 加州圣拉蒙 – 2017年11月15日– 致力于推动全行业移动打印标准的全球非盈利性会员制组织 Mopria®联盟今日发布Mopria Print Service 2.3,以扩大移动打印支持,允许用户使用诸多最喜爱的 应用程序中的“分享”功能进行打印。此外,Mopria Print Service 2.3还与Android 8.0 Oreo™兼容,后 者的默认打印解决方案采用Mopria核心技术,支持通过1亿多台经Mopria认证的打印机实现轻松移 动打印。所有安卓设备可在Google Play™商店下载其最新版。 Mopria Print Service 2.3利用Facebook、Flipboard、LinkedIn、Twitter和Pinterest等诸多 备受欢迎的应用中现有的“分享”功能,使用户能够轻松打印。当使用“分享”功能时,用户 将看到其中包含Mopria Print Service选项,该选项位于电子邮件和消息选项下方。“分享” 图标位于醒目位置,用户只需选择Mopria Print Service选项、选择打印机、调整设置并 打印即可。 该新版本还支持沿多个方向打孔、折边、装订等分页装订选项,同时提供新界面,新增一 项便于用户快速查看可供使用的打印机并确定其状态的功能。该新界面提供便捷的起点, 方便用户添加或隐藏打印机、访问Mopria设置、排除打印故障以及查看经Mopria认证的 打印机列表。该新界面包含教程,已将这一用户请求最多的功能添加至该项服务中,为新 用户提供移动打印流程指导及建议。 Mopria联盟指导委员会主席Brent Richtsmeier表示:“我们将继续为Mopria Print Service 添加功能,旨在使安卓设备的移动打印体验尽可能轻松便捷。利用全球最受欢迎的应用中 的分享功能中新增的打印选项,用户将重新发现移动打印的便利。” 自发布以来,Mopria Print Service已支持通过安卓智能手机和平板电脑连接经Mopria认 证的打印机实现打印。Mopria Print Service允许用户轻松自定义彩色打印、打印份数、 双面打印、纸张尺寸、页面打印范围、介质类型和打印方向等打印设置,同时还可以定制 用户身份验证、点针式打印和会计功能等工作场所功能,而且不需要安装特定打印机品牌 的应用程序。 自创始人佳能、惠普、三星和施乐成立Mopria联盟以来的四年里,该非盈利性会员制组 织成员已增加至21个,他们代表着全球打印机行业。除创始公司之外,Mopria联盟目前 包括:Adobe、柯尼卡美能达、高通、利盟、京瓷、东芝、Brother、爱普生、富士施乐 、微软、NEC、Pantum、理光、YSoft、夏普、戴尔和致伸科技(Primax)。 Mopria技术目前设备安装数量已超过7亿台,预计不出一年便会超过10亿台。在继续努力 使移动打印变得轻松便捷的同时,Mopria联盟还将进一步专注于云打印和扫描标准化。 Mopria联盟的目标在于促使这些解决方案为消费者和企业用户变得更加方便可及、直观 简便。如需获取经Mopria认证的打印机和打印附件的最新列表,敬请访问: http://mopria.org/certified-products。 关于Mopria®联盟 Mopria®联盟是一个非盈利性会员制组织,由全球领先的科技公司组成,其成立初衷为简 化智能手机、平板电脑和其他设备的打印操作。该联盟制定并推广一系列技术标准,旨在 提供连接不同设备和移动操作系统的直观体验。这些标准的普及使用户能够与各种品牌的 打印机进行无缝交互。此外,对新移动设备或打印机而言,将无需进行应用程序的下载和 安装。利用支持Mopria的移动设备寻找经Mopria认证的打印机和附件实现轻松打印,可 在www.mopria.org了解详情或者在Google Play商店下载最新版Mopria软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值