Android_Printservice_API_部分翻译

文件夹

* package android.printservice

* public abstract class PrintService

* public abstract class PrinterDiscoverySession

* public final class PrinterInfo

* public final class PrinterId

* public final class PrintJob

* public final class PrintJobInfo

* public final class PrinterCapabilitiesInfo

* public final class PrintDocument

* public final class PrintDocumentInfo



原链接:https://developer.android.com/reference/android/printservice/package-summary.html

package

android.printservice

提供打印服务实现的类。打印服务是一种插件( plug-in components),它能够通过一些标准协议和打印机通讯。

这些服务像一座桥。处于系统和打印机之间。因此,打印机和打印协议的具体实现从系统中分离的,能够独立开发和更新。

一个打印服务实现应该基于PrintService类。而且实现它的抽象方法(abstract methods)。

另外,打印服务必须要按约定来管理PrintJob(打印任务)类。

系统负责启动和停止一个打印服务。这个操作取决于该打印服务管理的打印机是否有激活的打印任务(active print jobs)。打印服务还要及时运行打印机发现操作,来保证好的用户体验。

在打印机发现过程中系统和该打印服务的交互封装在PrinterDiscoverySession类的实例中。由打印服务在系统须要的时候创建。

类 (Classes)

PrintDocument

从一个打印服务的角度来说,这个类代表一个待打印的文件(document)。

PrinterDiscoverySession

这个类封装了打印机发现过程中一个打印服务和系统的交互操作。

PrintJob

对一个打印服务来说,这个类代表一个打印任务(print job)。

PrintService

这个基础类用来实现打印服务。



原链接:https://developer.android.com/reference/android/printservice/PrintService.html

public abstract class

PrintService

extends Service

java.lang.Object
   ?    android.content.Context
       ?    android.content.ContextWrapper
           ?    android.app.Service
               ?    android.printservice.PrintService

类综述 Class Overview

这是打印服务(print services)实现的基础类。

一个打印服务知道怎样去发现打印机。而且通过一个或多个协议和一个或多个打印机交流。

打印机发现 Printer discovery

一个打印服务负责发现打印机,加入发现的打印机。移除加入的打印机和更新加入的打印机。

当系统须要你的服务所管理的打印机时,系统会调用onCreatePrinterDiscoverySession(),在这个函数里你必须返回一个PrinterDiscoverySession对象实例(instance)。

这个返回的session(会话)封装了系统和你的服务交互的内容。包括在打印机发现阶段的操作。

这个交互的很多其它描写叙述。參考PrinterDiscoverySession文档。

对每一个打印发现会话(session)来说。全部的打印机必须要被加入,由于系统在会话过后不会保留。因此。打印服务检測到的每一个打印机都应该被加入。而且在一个发现会话中仅加入一次。仅仅有已经加入的打印机才干被移除(removed)或者更新(updated)。

移除的打印机也能被再次加入。

打印工作 Print jobs

当一个新的打印工作(print jobs)指派到该打印服务所管理的打印机上,打印工作被放入队列(queued)。也就是,准备好由打印服务处理。

你会收到一个onPrintJobQueued(PrintJob)调用。该打印服务可能会马上处理这个打印工作或者放入计划中过会调度。该打印服务的全部活动的打印工作在一个列表里,这个列表通过调用getActivePrintJobs()能够获得。活动的打印工作(Active print jobs)就是在队列中或已開始的那些。

当一个打印服务在处理一个打印工作时。打印服务负责设置该打印工作为适当的状态。

首先,一个打印工作在队列中,也就是PrintJob.isQueued()返回true。这意味着要打印的文档已被系统安排(spooled),该打印服务能够随时处理它。

你能够通过调用PrintJob.getDocument()获得要打印的文档。这里面的数据能够通过PrintDocument.getData()读取。在打印服务開始打印数据,该打印工作(print job)状态应该被设置为已開始(started),通过调用start()函数设置。设置之后,PrintJob.isStarted()应该会返回true。在工作成功完毕后。该打印工作应该被标记为已完毕(completed),通过调用PrintJob.complete()设置。设置之后,PrintJob.isCompleted()应该会返回true。

失败的话,该打印工作应该被标记为失败(failed),通过调用PrintJob.fail( String)设置。

设置后,PrintJob.isFailed()应该返回true。

假设一个打印工作(print job)处于队列(queued)或已開始(started)。这时用户请求取消它,该打印服务会收到一个onRequestCancelPrintJob(PrintJob)调用。服务里的这个请求希望尽最大努力取消该工作(job)。若该工作被成功取消,它的状态须要通过PrintJob.cancel()被标记取消。

标记后。PrintJob.isCacnelled()应该返回true。

生命周期 Lifecycle

一个打印服务的生命周期仅仅由系统管理而且按规定的生命周期活动。另外。開始或者停止一个打印服务仅仅由一个特定的用户行为触发,就是在设备设置里启用(enabling)或者禁用(disabling)服务。

在系统绑定(binds)了一个打印服务后,系统会调用onConnected()

这种方法能够被客户端(clients)重写来运行绑定(binding)有关的操作。而且在系统解绑(unbinds)一个打印服务后,系统会调用onDisconnected()

这种方法能够被客户端(clients)重写来运行解绑(unbinding)有关的清理操作。你的不论什么工作都不应该在系统和你的打印服务断开连接之后做,由于这个服务在回收内存时随时会被杀死。当该打印服务管理的打印机有活动的打印工作时。系统不会与之断开连接。

声明 Declaration

一个打印服务和其它不论什么服务一样,须要在AndroidManifest.xml里声明。可是它还必须处理action为android.printservice.PrintService的Intent。

这个intent声明失败会导致系统忽略该打印服务。

另外,一个打印服务必须请求android.permission.BIND_PRINT_SERVICE权限,来保证仅仅有系统能绑定(bind)它。声明这个失败会导致系统忽略这个打印服务。以下是一个声明的样例:

 <service android:name=".MyPrintService"
         android:permission="android.permission.BIND_PRINT_SERVICE">
     <intent-filter>
         <action android:name="android.printservice.PrintService" />
     </intent-filter>
     . . .
 </service>

配置 Configuration

一个打印服务可通过自己定义设置页面(setting activity)进行配置,该activity提供自己定义设置功能。

一个加入打印机的activity能够手动加入打印机。供应商名称等等。系统负责在适当的时候启动设置和加入打印机的activities。

一个打印服务在声明的时候,要在mainfest里提供一条meta-data。这是指定上述activities的方式。一个服务的meta-data标签(tag)声明例如以下所看到的:

 <service android:name=".MyPrintService"
         android:permission="android.permission.BIND_PRINT_SERVICE">
     <intent-filter>
         <action android:name="android.printservice.PrintService" />
     </intent-filter>
     <meta-data android:name="android.printservice" android:resource="@xml/printservice" />
 </service>

关于通过meta-data配置你的打印服务的很多其它细节,能够參考SERVICE_META_DATA<print-service>

提示:这个类里的全部回调函数(callbacks)都在程序的主线程里运行。你也应该在程序的主线程里调用(invoke)这个类里的方法。



原链接: https://developer.android.com/reference/android/printservice/PrinterDiscoverySession.html

public abstract class

PrinterDiscoverySession

extends Object

java.lang.Object
   ?    android.printservice.PrinterDiscoverySession

类综述 Class Overview

这个类封装了一个打印服务和系统在打印机寻找(printer discovery)过程中的交互内容。在打印机寻找过程中,你(指这个类)负责加入发现的打印机,移除之前加入但无效的打印机,更新已经加入的打印机。

在这个会话(session)的一生中,你可能会被多次请求開始和停止寻找打印机。

你会被调用onStartPrinterDiscovery(List)来開始寻找打印机,然后被调用onStopPrinterDiscovery()来停止寻找打印机。

当系统不再须要这个会话(session)来寻找打印机,你会收到onDestroy()调用。在这时。系统将不会再调用这个会话session,整个会话里的方法都不再实用。

被发现的打印机通过调用addPrinters(List)方法加入。

加入好的打印机通过调用removePrinters(List)来移除。

加入的打印机的属性和功能(properties or capabilities )通过调用addPrinters(List)来更新。

这些被加入的打印机能通过getPrinters()获取。在该方法里返回的打印机是你上报的打印机的一个最新快照(snapshot)。

这些打印机在会话(session)后不会保留

假设你(推測指用户。之前指这个类)须要更新一些打印机,系统会调用onValidatePrinters(List)

你可能会仅仅加入一个打印机而不配置它的功能特性(capabilities)。这个机制使得你避免为了配置打印机的功能而查询全部打印机。而是仅仅在必要的时候查询一个打印机的功能就可以。

比如,一个打印机被用户选择使用,系统会请求你更新这个打印机。

验证打印机时你不须要提供打印机的功能特性,但能够这样做。

假设系统要持续监測打印机的最新状态,你会收到一个onStartPrinterStateTracking(PrinterId)调用。

收到之后,你必须尽可能地保持系统得到打印机最新的状态和功能特性。当你之前加入打印机的时候没有提供它的功能特性,你在这时必须更新这些内容。要不然打印机就会被忽略。当系统不再须要获取打印机的最新状态时,你会收到一个onStopPrinterStateTracking(PrinterId)调用。

提示:这个类里的全部回调函数都在程序的主线程运行。你自己用的时候也要在主线程调用这些函数。



public final class

PrinterInfo

extends Object

implements Parcelable


java.lang.Object
   ?    android.print.PrinterInfo

类综述 Class Overview

这个类是一个打印机的描写叙述。

这个类的实例由打印服务创建。把它们管理的打印机报告给系统。这个类里面的信息有两大部分。第一部分。打印机属性,列如name(名称),id(编号),status(状态),description(描写叙述)。第二部分,printer capabilities(打印机能力)。printer capabilities描写叙述了打印机支持的各种打印模式,比如media sizes(大概是纸张尺寸),margins(留白大小)等等。



public final class

PrinterId

extends Object

implements Parcelable

java.lang.Object
   ?    android.print.PrinterId

类综述 Class Overview

这个类代表一个打印机独一无二的编号



public final class

PrintJob

extends Object


java.lang.Object
   ?    android.printservice.PrintJob

类综述 Class Overview

从一个打印服务的角度来看。这个类代表一个打印任务(print job)。它提供了一些API来观察打印任务的状态和在打印任务上运行操作。

提示:类里面的全部方法都必须在应用主线程里运行。



public final class

PrintJobInfo

extends Object

implements Parcelable


java.lang.Object
   ?    android.print.PrintJobInfo

类综述 Class Overview

这个类代表了一个打印任务的具体描写叙述。

打印机任务的状态包括一些配置。比如:它的id(编号)、打印属性。这用来生成一些内容等等。注意,打印任务状态可能会随着时间改变。这个类仅仅代表了状态的一个时刻(snapshot)。



public final class

PrinterCapabilitiesInfo

extends Object

implements Parcelable

java.lang.Object
   ?    android.print.PrinterCapabilitiesInfo

类综述 Class Overview

这个类代表了一个打印机的能力(capabilities)。

这个类的实例由一个打印服务创建,用来报告它所管理的打印机的能力。

一个打印机的能力指出了它怎样打印内容。

比如:打印机支持什么纸张大小(media sizes),打印机设计的最小留白(the minimal margins),等等。



public final class

PrintDocument

extends Object

java.lang.Object
   ?    android.printservice.PrintDocument

类综述 Class Overview

对一个打印服务来说,这个类代表一个待打印的文件。

它提供一些API来查询文件和其包括的数据。

提示:全部的方法必须在程序的主线程里运行。



public final class

PrintDocumentInfo

extends Object

implements Parcelable

java.lang.Object
   ?    android.print.PrintDocumentInfo

类综述 Class Overview

这个类封装了关于一个文档跟打印有关的信息。

这个meta-data(元数据)被平台(platform)和打印服务使用,构成和打印机的交互。

比如,这个类包括文档的页数,文档页数展示给使用者是为了使他们能够选择打印的范围。一个打印服务可能会针对内容类型对打印进行优化,比如文档(document)或者照片。

这个类的实例由须要打印的应用创建。在成功排版内容(laying out the content)之后调用PrintDocumentAdapter.LayoutResultCallback.onLayoutFinished( PrintDocumentInfo, boolean)回调函数。这个过程运行在PrintDocumentAdapter.onLayout(PrintAttributes, PrintAttributes, android.os.CancellationSignal, PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle)里。

一个使用样例例如以下:

 . . .

 public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,
         CancellationSignal cancellationSignal, LayoutResultCallback callback,
         Bundle metadata) {

        // Assume the app defined a LayoutResult class which contains
        // the layout result data and that the content is a document.
        LayoutResult result = doSomeLayoutWork();

        PrintDocumentInfo info = new PrintDocumentInfo
                .Builder("printed_file.pdf")
                .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
                .setPageCount(result.getPageCount())
                .build();

       callback.onLayoutFinished(info, result.getContentChanged());
   }

   . . .
时间: 2024-10-20 23:51:01

Android_Printservice_API_部分翻译的相关文章

在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】

前言 本人一直开发Android应用,目前Android就业形势恶劣,甚至会一路下滑,因此决定学习服务器开发.采用的语言是java,IDE是Intellij,在下载Intellij的同时看到官网很多优秀的guide文章,于是按照guide成功完成了一个RESTful的demo.官方文档非常简洁,给我带来了很大的帮助,于是翻译之,希望对其他不愿意看原文的人有所帮助.由于水平有限,读者发现错误请指正,谢谢. 原文地址: https://www.jetbrains.com/help/idea/2016

Java 7 Concurrency Cookbook 翻译 序言

在日常的Java代码开发过程中,很难免地有对多线程的需求,掌握java多线程和并发的机制也是Java程序员写出更健壮和高效代码的基础.笔者找寻国内已出版的关于Java多线程和并发的的中文书籍和翻译书籍,大家一致推荐的是<Java Concurrency in Practice>,笔者暂时还没有看英文原版,笔者看的是它的翻译版<Java并发编程实战>,笔者读起来感觉并不通畅,不知道是翻译的问题还是原版本来就写得不够流畅,同时感觉知识的深度也超过了入门的需求. 笔者在机缘巧合之下,发现

[翻译] ORMLite document -- How to Use Part (二)

前言 此文档翻译于第一次学习 ORMLite 框架,如果发现当中有什么不对的地方,请指正.若翻译与原文档出现任何的不相符,请以原文档为准.原则上建议学习原英文文档. ---------------------------------------------------------------------------------------------- 二.如何使用 2.7 表的创建 ORMLite 提供了一些工具类为您存储在数据库中的类创建 table 和 schema. 2.7.1 Tabl

Reveal常用技巧(翻译来自Reveal官网blog)

翻译来自官网:http://revealapp.com/blog/reveal-common-tips-cn.html 以下基于Reveal 1.6. 用于快速上手的内置应用 刚刚下载Reveal,啥都还没配置呢,想先随便玩玩看,怎么办? 我们花了不少时间开发这个复杂程度类似与实际场景的Sample应用──Soundstagram(音频分享版的Instagram, ¯\_(ツ)_/¯),就是为了让大家能最快速地上手Reveal,尝试它的各种强大功能. 在 Help 菜单项中,点击 Inspect

qt 国际化(翻译时会触发changeEvent)

1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \        Resource/translations/hello_world.ts 写代码时需要注意下面两点:  2. 源码用 utf-8 字符集3. 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),则需要用 tr()  函数.  例如: QMessageBox::information(this,tr("Information"),tr("Hel

还在吐槽翻译的外版书质量差吗?谈谈我个人的理解

很难想象哪个学习计算机技术的人是没看过这方面书籍的,如果只是在网上看看技术贴,那样得来的知识绝对是离散的,不系统的.而要真正学好一门学问(比如一门计算机语言或者一门技术),一本好书的作用是不言而喻的.很多人抱怨国人在技术图书方面抄来抄去,不求甚解,虽然出版图书者甚众,但最终成为精品者却凤毛麟角.于是,更多读者热衷于外版书.但显然,并非所有国人的外语水平都足以在阅读原版书籍时毫无障碍.那么退而求其次,寻求翻译版就成为一种看似不得已的选择. 不幸的是,网上对于翻译版书籍的吐槽可以说从未消停.我也看过

VLD 1.0 ReadMe翻译尝试

近期想学习下VLD的实现,打算从最简单的V1.0版本看起.以下是V1.0版本自己尝试翻译下,最新的2.x版本似乎强大了很多. 简介 Visual C++提供了内置的内存检测机制,但其充其量只满足了最小定位需求.VLD工具定位为内置内存泄漏的替代,提供了如下特性: 泄漏内存块的全调用栈回溯,包括文件及其行号: 泄漏内存完整转储(hex和ascii格式): 可定制的泄漏报告等级(报告的详细程度可配置) 相对于Purify和BoundsChecher工具其是免费的,而其他免费工具,往往需要入侵式代码.

如何调用有道翻译API(Java,HTTP)

申请Key 首先如图进入有道翻译,在下方点击"有道翻译API". 紧接着来调用数据接口,按提示完成下列输入框. 如下图所示,已经申请成功了. 下图是官方给的示例,可以有xml和json.jsonp等三种数据格式. 代码(Java) public class TestPost { public static void main(String[] args) { new ReadByPost().start(); } } class ReadByPost extends Thread{ @

Android studio project文件结构翻译

Android studio project文件结构翻译 个人翻译,用作备忘. 链接地址:https://developer.android.com/tools/projects/index.html#ApplicationModules Android Project Files Studio的项目文件和设置,设置的作用范围包含所有的module. 以以下的demo为例. .git:git版本控制的文件存放目录. .gradle:gradle执行一些编译所生成的目录 Idea: 由Intell