public abstract class PrintService
extends Service
java.lang.Object | ||||
↳ | android.content.Context | |||
↳ | android.content.ContextWrapper | |||
↳ | android.app.Service | |||
↳ | android.printservice.PrintService |
这是实现打印服务的基类。 打印服务知道如何通过一个或多个协议发现和交互一台或多台打印机。
打印服务负责发现打印机,添加发现的打印机,删除添加的打印机以及更新添加的打印机。 当系统对由您的服务管理的打印机感兴趣时,它将调用onCreatePrinterDiscoverySession()
,您必须从中返回一个新的PrinterDiscoverySession
实例。 返回的会话在打印机发现期间封装了系统和您的服务之间的交互。 有关此交互的说明,请参阅PrinterDiscoverySession
的文档。
对于每个打印机发现会话,都必须添加所有打印机,因为系统不会在会话中保留打印机。 因此,打印服务已知的每台打印机应在发现会话期间仅添加一次。 只有已添加的打印机才能被删除或更新。 删除的打印机可以再次添加。
当针对由此打印服务管理的打印机的新打印作业正在排队时,即准备好由打印服务处理时,您将收到对onPrintJobQueued(PrintJob)
的呼叫。 打印服务可能会立即处理打印作业,或在未来适当的时间安排打印作业。 通过调用getActivePrintJobs()
获取此服务的所有活动打印作业的列表。 活动的打印作业是排队或开始的作业。
打印服务负责在处理打印作业时酌情设置打印作业的状态。 最初,打印作业正在排队,即PrintJob.isQueued()
返回true,这意味着要打印的文档被系统假脱机并且打印服务可以开始处理它。 您可以拨打电话PrintJob.getDocument()
来获取打印的文件,其数据通过PrintDocument.getData()
访问。 在打印服务开始打印数据后,它应该通过调用start()
将打印作业的状态设置为开始,之后PrintJob.isStarted()
将返回true。 成功完成后,应通过调用PrintJob.complete()
将打印作业标记为已完成,之后PrintJob.isCompleted()
将返回true。 如果出现故障,应通过调用PrintJob.fail( String)
将该打印作业标记为失败,之后PrintJob.isFailed()
将返回true。
如果打印作业已排队或开始并且用户请求取消打印作业,则打印服务将收到对onRequestCancelPrintJob(PrintJob)
的呼叫,请求服务部门尽最大努力取消作业。 如果作业被成功取消,其状态已通过调用作为取消被标记PrintJob.cancel()
之后PrintJob.isCacnelled()
将返回true。
打印服务的生命周期仅由系统管理,并遵循已建立的服务生命周期。 此外,启动或停止打印服务是通过在设备设置中启用或禁用显式用户操作来完全触发的。 系统绑定到打印服务后,它调用onConnected()
。 客户端可以重写此方法以执行绑定后设置。 系统从打印服务中解除绑定后,它会调用onDisconnected()
。 客户端可以重写此方法以执行解除后绑定清理。 在系统与打印服务断开连接后,您不应该做任何工作,因为可以随时终止服务以回收内存。 如果由其管理的打印机有活动的打印作业,则系统不会从打印服务断开连接。
打印服务被声明为在AndroidManifest.xml中任何其他服务,但它也必须指定它处理Intent
用行动android.printservice.PrintService
。 未能声明此意图将导致系统忽略打印服务。 此外,打印服务必须请求android.permission.BIND_PRINT_SERVICE
权限才能确保只有系统可以绑定到它。 未能声明此意图将导致系统忽略打印服务。 以下是一个示例声明:
<service android:name=".MyPrintService" android:permission="android.permission.BIND_PRINT_SERVICE"> <intent-filter> <action android:name="android.printservice.PrintService" /> </intent-filter> . . . </service>
打印服务可以通过指定一个可选的设置活动进行配置,该活动可以显示特定于服务的设置,可选的添加打印机活动,用于手动添加打印机,供应商名称等。 在适当的时候启动设置并添加打印机活动是系统的责任。
通过在声明服务时在清单中提供meta-data
条目来配置打印服务。 具有元数据标签的服务声明如下所示:
<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>
有关如何通过元数据配置打印服务的更多详细信息,请参阅 SERVICE_META_DATA
和 <
。print-service
>
注意:此类中的所有回调都在主应用程序线程上执行。 您还应该在主应用程序线程上调用此类的任何方法。
Constants |
|
---|---|
String |
EXTRA_PRINTER_INFO 如果您通过 |
String |
EXTRA_PRINT_DOCUMENT_INFO 如果您通过 |
String |
EXTRA_PRINT_JOB_INFO 如果您通过 |
String |
SERVICE_INTERFACE
|
String |
SERVICE_META_DATA
|
Inherited constants |
---|
From class android.app.Service
|
From class android.content.Context
|
From interface android.content.ComponentCallbacks2
|
Public constructors |
|
---|---|
PrintService() |
Public methods |
|
---|---|
final PrinterId |
generatePrinterId(String localId) 生成打印机本地唯一的全局打印机ID。 |
final List<PrintJob> |
getActivePrintJobs() 获取由此服务管理的打印机的活动打印作业。 |
final IBinder |
onBind(Intent intent) 将通信信道返回给服务。 |
Protected methods |
|
---|---|
final void |
attachBaseContext(Context base) 为此ContextWrapper设置基本上下文。 |
void |
onConnected() 系统已连接到此服务。 |
abstract PrinterDiscoverySession |
onCreatePrinterDiscoverySession() 回拨要求您创建一个新的 |
void |
onDisconnected() 系统已与此服务断开连接。 |
abstract void |
onPrintJobQueued(PrintJob printJob) 当由此打印服务管理的其中一台打印机有排队的打印作业时调用。 |
abstract void |
onRequestCancelPrintJob(PrintJob printJob) 在请求取消打印作业时调用。 |
Inherited methods |
|
---|---|
From class android.app.Service
|
|
From class android.content.ContextWrapper
|
|
From class android.content.Context
|
|
From class java.lang.Object
|
|
From interface android.content.ComponentCallbacks2
|
|
From interface android.content.ComponentCallbacks
|
String EXTRA_PRINTER_INFO
如果您通过 advancedPrintOptionsActivity
属性声明了具有高级打印选项的可选活动,则此额外用于将当前选定打印机的 PrinterInfo
给您的活动,以便您检查它。
也可以看看:
常量值:“android.intent.extra.print.EXTRA_PRINTER_INFO”
String EXTRA_PRINT_DOCUMENT_INFO
如果您通过 advancedPrintOptionsActivity
属性声明了具有高级打印选项的可选活动,则此额外用于将当前打印文档的元数据作为 PrintDocumentInfo
给您的活动,以 PrintDocumentInfo
您检查它。
常量值:“android.printservice.extra.PRINT_DOCUMENT_INFO”
String EXTRA_PRINT_JOB_INFO
如果您通过advancedPrintOptionsActivity
属性声明了具有高级打印选项的可选活动,则使用此额外内容将当前构建的PrintJobInfo
给您的活动,以便您修改它。 完成之后,您必须通过相同的额外返回修改后的PrintJobInfo
。
您不能直接修改PrintJobInfo
的传递,而应该使用PrintJobInfo.Builder
类构建另一个。 您可以指定任何标准属性并通过PrintJobInfo.Builder.putAdvancedOption(String, String)
和PrintJobInfo.Builder.putAdvancedOption(String, int)
添加高级打印机特定的PrintJobInfo.Builder.putAdvancedOption(String, int)
。 高级选项不被系统解释,它们对于应用程序不可见,只能由您的打印服务通过PrintJob.getAdvancedStringOption(String)
和PrintJob.getAdvancedIntOption(String)
。
如果高级打印选项活动提供更改标准打印选项,你可以得到当前PrinterInfo
使用EXTRA_PRINTER_INFO
多余的,这将使您呈现与当前打印机支持的UI选项的用户。 例如,如果当前打印机不支持给定的介质尺寸,则不应在高级打印选项UI中提供它。
也可以看看:
常量值:“android.intent.extra.print.PRINT_JOB_INFO”
String SERVICE_INTERFACE
必须声明的 Intent
操作由其清单中的服务处理,以便系统将其识别为打印服务。
常量值:“android.printservice.PrintService”
String SERVICE_META_DATA
PrintService
组件发布有关其自身的附加信息的名称。 此元数据必须引用包含<
标记的XML资源。 这是配置打印服务的示例XML文件:print-service
>
<print-service android:vendor="SomeVendor" android:settingsActivity="foo.bar.MySettingsActivity" andorid:addPrintersActivity="foo.bar.MyAddPrintersActivity." . . . />
有关可通过元数据指定的详细配置选项,请参阅 android.R.styleable.PrintService
。
如果您声明设置或添加打印机活动,则必须将其导出,方法是将exported
活动属性设置为true
。 此外,如果您只希望系统能够启动任何这些活动,您可以指定他们通过设置permission
活动属性来请求android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY权限。
常量值:“android.printservice”
PrinterId generatePrinterId (String localId)
生成打印机本地唯一的全局打印机ID。
Parameters | |
---|---|
localId |
String : A locally unique id in the context of your print service. |
Returns | |
---|---|
PrinterId |
Global printer id. |
List<PrintJob> getActivePrintJobs ()
获取由此服务管理的打印机的活动打印作业。 活动打印作业是未处于最终状态的作业,即其状态排队或开始。
Returns | |
---|---|
List<PrintJob> |
The active print jobs. |
IBinder onBind (Intent intent)
将通信信道返回给服务。 如果客户端无法绑定到服务,可能会返回null。 返回IBinder
通常是一个复杂的界面已经described using aidl 。
请注意,与其他应用程序组件不同,此处返回的IBinder接口调用可能不会发生在进程的主线程上 。 有关主线程的更多信息可以在Processes and Threads中找到。
Parameters | |
---|---|
intent |
Intent : The Intent that was used to bind to this service, as given to Context.bindService . Note that any extras that were included with the Intent at that point will not be seen here. |
Returns | |
---|---|
IBinder |
Return an IBinder through which clients can call on to the service. |
void attachBaseContext (Context base)
为此ContextWrapper设置基本上下文。 所有的调用都会被委托给基础上下文。 如果已经设置了基本上下文,则引发IllegalStateException。
Parameters | |
---|---|
base |
Context : The new base context for this wrapper. |
PrinterDiscoverySession onCreatePrinterDiscoverySession ()
回拨要求您创建一个新的 PrinterDiscoverySession
。
Returns | |
---|---|
PrinterDiscoverySession |
The created session. |
也可以看看:
void onPrintJobQueued (PrintJob printJob)
当由此打印服务管理的其中一台打印机有排队的打印作业时调用。
Parameters | |
---|---|
printJob |
PrintJob : The new queued print job. |
void onRequestCancelPrintJob (PrintJob printJob)
在请求取消打印作业时调用。 该服务应该尽最大努力来满足要求。 执行取消操作后,应通过调用cancel()
将打印作业标记为取消状态。
Parameters | |
---|---|
printJob |
PrintJob : The print job to cancel. |