小编ait*_*hat的帖子

如何在 Android 应用程序中指定和添加自定义打印机?

我正在为 Android 创建一个应用程序。所需的应用程序功能的一部分是用户可以选择一个特殊的打印机(我们将其称为传输打印机),它将将要打印的文档传递到在外部服务器上运行的进程。

我需要采取哪些步骤才能将自定义打印机添加到 Android 打印面板中的打印机列表(可通过“溢出”菜单的“打印”选项进行访问)?

出于用户体验考虑,最好使用现有的 Android 打印面板功能,而不是应用程序选择器中的附加共享选项;对于用户来说,单击“共享”而不是“打印”以获得所需的功能并不直观。

先前的研究

有一个现有的类似问题,自从不久前发布以来,没有引起多少兴趣。提问者已将 PrintManager 类确定为主导,但我相信PrintService类可能会更富有成果:

打印服务负责发现打印机、添加已发现的打印机、删除已添加的打印机以及更新已添加的打印机。

同一页详细介绍了打印服务的声明和配置。我已经这样做了,如下所示。

尝试执行

声明与配置

在AndroidManifest.xml中:

...
<application
    ... >
    ...
    <service
        android:name=".TransferPrintService"
        android:permission="android.permission.BIND_PRINT_SERVICE"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="android.printservice.PrintService" />
        </intent-filter>
        <meta-data
            android:name="android.printservice"
            android:resource="@xml/transfer_print_service" />
    </service>
</application>
Run Code Online (Sandbox Code Playgroud)

元数据

我不清楚元数据应该在哪里指定。从 PrintService 页面的 SERVICE_META_DATA 部分:

该元数据必须引用包含打印服务标记的 XML 资源。

在 res/xml/transfer_print_service.xml 中:

<print-service
    android:label="TransferPrintService"
    android:vendor="Company Ltd." />
Run Code Online (Sandbox Code Playgroud)

传输打印服务类

这将创建一个自定义 PrinterDiscoverySession。我现阶段的目标是让打印机出现在打印面板中并从那里开始工作。

public class TransferPrintService extends PrintService {

    public TransferPrintService() {
    }

    @Override
    public void onPrintJobQueued(PrintJob printJob) {
        printJob.start(); …
Run Code Online (Sandbox Code Playgroud)

java xml printing android android-4.4-kitkat

5
推荐指数
1
解决办法
4298
查看次数

标签 统计

android ×1

android-4.4-kitkat ×1

java ×1

printing ×1

xml ×1