Most visited

Recently visited

Added in API level 19

PrintService

public abstract class PrintService
extends Service

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


这是实现打印服务的基类。 打印服务知道如何通过一个或多个协议发现和交互一台或多台打印机。

Printer discovery

打印服务负责发现打印机,添加发现的打印机,删除添加的打印机以及更新添加的打印机。 当系统对由您的服务管理的打印机感兴趣时,它将调用onCreatePrinterDiscoverySession() ,您必须从中返回一个新的PrinterDiscoverySession实例。 返回的会话在打印机发现期间封装了系统和您的服务之间的交互。 有关此交互的说明,请参阅PrinterDiscoverySession的文档。

对于每个打印机发现会话,都必须添加所有打印机,因为系统不会在会话中保留打印机。 因此,打印服务已知的每台打印机应在发现会话期间仅添加一次。 只有已添加的打印机才能被删除或更新。 删除的打印机可以再次添加。

Print jobs

当针对由此打印服务管理的打印机的新打印作业正在排队时,即准备好由打印服务处理时,您将收到对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。

Lifecycle

打印服务的生命周期仅由系统管理,并遵循已建立的服务生命周期。 此外,启动或停止打印服务是通过在设备设置中启用或禁用显式用户操作来完全触发的。 系统绑定到打印服务后,它调用onConnected() 客户端可以重写此方法以执行绑定后设置。 系统从打印服务中解除绑定后,它会调用onDisconnected() 客户端可以重写此方法以执行解除后绑定清理。 在系统与打印服务断开连接后,您不应该做任何工作,因为可以随时终止服务以回收内存。 如果由其管理的打印机有活动的打印作业,则系统不会从打印服务断开连接。

Declaration

打印服务被声明为在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>
 

Configuration

打印服务可以通过指定一个可选的设置活动进行配置,该活动可以显示特定于服务的设置,可选的添加打印机活动,用于手动添加打印机,供应商名称等。 在适当的时候启动设置并添加打印机活动是系统的责任。

通过在声明服务时在清单中提供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>

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

Summary

Constants

String EXTRA_PRINTER_INFO

如果您通过 advancedPrintOptionsActivity属性声明了具有高级打印选项的可选活动,则此额外用于将当前选定打印机的 PrinterInfo给您的活动,以便您检查它。

String EXTRA_PRINT_DOCUMENT_INFO

如果您通过 advancedPrintOptionsActivity属性声明了具有高级打印选项的可选活动,则此额外用于将当前打印文档的元数据作为 PrintDocumentInfo给您的活动,以 PrintDocumentInfo您检查它。

String EXTRA_PRINT_JOB_INFO

如果您通过 advancedPrintOptionsActivity属性声明了具有高级打印选项的可选活动,则使用此额外内容将当前构建的 PrintJobInfo给您的活动,以便您修改它。

String SERVICE_INTERFACE

Intent必须声明为由其清单中的服务处理的操作,以便系统将其识别为打印服务。

String SERVICE_META_DATA

PrintService组件发布有关其自身的附加信息的名称。

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()

回拨要求您创建一个新的 PrinterDiscoverySession

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

Constants

EXTRA_PRINTER_INFO

Added in API level 21
String EXTRA_PRINTER_INFO

如果您通过 advancedPrintOptionsActivity属性声明了具有高级打印选项的可选活动,则此额外用于将当前选定打印机的 PrinterInfo给您的活动,以便您检查它。

也可以看看:

常量值:“android.intent.extra.print.EXTRA_PRINTER_INFO”

EXTRA_PRINT_DOCUMENT_INFO

Added in API level 23
String EXTRA_PRINT_DOCUMENT_INFO

如果您通过 advancedPrintOptionsActivity属性声明了具有高级打印选项的可选活动,则此额外用于将当前打印文档的元数据作为 PrintDocumentInfo给您的活动,以 PrintDocumentInfo您检查它。

也可以看看:

常量值:“android.printservice.extra.PRINT_DOCUMENT_INFO”

EXTRA_PRINT_JOB_INFO

Added in API level 19
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”

SERVICE_INTERFACE

Added in API level 19
String SERVICE_INTERFACE

必须声明的 Intent操作由其清单中的服务处理,以便系统将其识别为打印服务。

常量值:“android.printservice.PrintService”

SERVICE_META_DATA

Added in API level 19
String SERVICE_META_DATA

PrintService组件发布有关其自身的附加信息的名称。 此元数据必须引用包含<print-service>标记的XML资源。 这是配置打印服务的示例XML文件:

 <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”

Public constructors

PrintService

Added in API level 19
PrintService ()

Public methods

generatePrinterId

Added in API level 19
PrinterId generatePrinterId (String localId)

生成打印机本地唯一的全局打印机ID。

Parameters
localId String: A locally unique id in the context of your print service.
Returns
PrinterId Global printer id.

getActivePrintJobs

Added in API level 19
List<PrintJob> getActivePrintJobs ()

获取由此服务管理的打印机的活动打印作业。 活动打印作业是未处于最终状态的作业,即其状态排队或开始。

Returns
List<PrintJob> The active print jobs.

也可以看看:

onBind

Added in API level 19
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.

Protected methods

attachBaseContext

Added in API level 19
void attachBaseContext (Context base)

为此ContextWrapper设置基本上下文。 所有的调用都会被委托给基础上下文。 如果已经设置了基本上下文,则引发IllegalStateException。

Parameters
base Context: The new base context for this wrapper.

onConnected

Added in API level 19
void onConnected ()

系统已连接到此服务。

onCreatePrinterDiscoverySession

Added in API level 19
PrinterDiscoverySession onCreatePrinterDiscoverySession ()

回拨要求您创建一个新的 PrinterDiscoverySession

Returns
PrinterDiscoverySession The created session.

也可以看看:

onDisconnected

Added in API level 19
void onDisconnected ()

系统已与此服务断开连接。

onPrintJobQueued

Added in API level 19
void onPrintJobQueued (PrintJob printJob)

当由此打印服务管理的其中一台打印机有排队的打印作业时调用。

Parameters
printJob PrintJob: The new queued print job.

也可以看看:

onRequestCancelPrintJob

Added in API level 19
void onRequestCancelPrintJob (PrintJob printJob)

在请求取消打印作业时调用。 该服务应该尽最大努力来满足要求。 执行取消操作后,应通过调用cancel()将打印作业标记为取消状态。

Parameters
printJob PrintJob: The print job to cancel.

也可以看看:

Hooray!