Printing 是否可以在android中打印网页而不弹出窗口?

Printing 是否可以在android中打印网页而不弹出窗口?,printing,android-print-framework,Printing,Android Print Framework,我正在使用默认的android打印机选项(android版本4.4) 我想绕过printManager适配器弹出窗口。如何在android中隐藏弹出窗口并直接打印到打印机 在我看来,答案似乎是肯定的 以下是Android的PrintManager类中的print()方法: public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter, PrintAttributes attributes) {

我正在使用默认的android打印机选项(android版本4.4)

我想绕过printManager适配器弹出窗口。如何在android中隐藏弹出窗口并直接打印到打印机


在我看来,答案似乎是肯定的

以下是Android的
PrintManager
类中的
print()
方法:

public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter, PrintAttributes attributes)
{
    if (mService == null)
    {
        Log.w(LOG_TAG, "Feature android.software.print not available");
        return null;
    }
    if (!(mContext instanceof Activity))
    {
        throw new IllegalStateException("Can print only from an activity");
    }
    if (TextUtils.isEmpty(printJobName))
    {
        throw new IllegalArgumentException("printJobName cannot be empty");
    }
    if (documentAdapter == null)
    {
        throw new IllegalArgumentException("documentAdapter cannot be null");
    }
    PrintDocumentAdapterDelegate delegate = new PrintDocumentAdapterDelegate((Activity) mContext, documentAdapter);
    try
    {
        Bundle result = mService.print(printJobName, delegate, attributes, mContext.getPackageName(), mAppId, mUserId);
        if (result != null)
        {
            PrintJobInfo printJob = result.getParcelable(EXTRA_PRINT_JOB);
            IntentSender intent = result.getParcelable(EXTRA_PRINT_DIALOG_INTENT);
            if (printJob == null || intent == null)
            {
                return null;
            }
            try
            {
                mContext.startIntentSender(intent, null, 0, 0, 0);
                return new PrintJob(printJob, this);
            }
            catch (SendIntentException sie)
            {
                Log.e(LOG_TAG, "Couldn't start print job config activity.", sie);
            }
        }
    }
    catch (RemoteException re)
    {
        Log.e(LOG_TAG, "Error creating a print job", re);
    }
    return null;
}
只需创建您自己的类(我将假装它名为
MyPrintManager
),它
扩展了PrintManager
,并
@覆盖其中的
print()
方法。然后,使用上面的代码,但删除此行:

mContext.startIntentSender(intent, null, 0, 0, 0);
然后,使用下面的代码获取
MyPrintManager
类的实例:

MyPrintManager printManager = (MyPrintManager) appContext.getSystemService(Context.PRINT_SERVICE);

你可以试试这个,虽然我不确定它是否有效,因为我还没有测试过。请回复结果,如果它不起作用,我将尝试进一步帮助您。

您无法扩展PrintManager类。这是最后一节课。请查看下面的链接

这些家伙设计了他们自己的打印框架。他们正在设计他们自己的对话框。看一看


上述方法中的mService是什么???@John查看Android源代码中的
PrintManager
类:它是一个
IPrintManager
,在创建过程中由系统提供。我认为您可以复制整个
PrintManager
类,但是更改
print()
方法。我尝试复制PrintManager类,但没有找到IPrintManager类,并且缺少一些导入类,如:import com.android.internal.os.SomeArgs;导入libcore.io.IoUtils;导入android.printservice.PrintServiceInfo;如果我试图从GrepCode复制任何文件。它不断地要求这么多的班级档案。那么,有没有其他办法来解决这个问题呢???@John,很遗憾,我不知道其他办法。我甚至不确定这是否有效。对不起。@John没问题!;)请将您的答案合并成一个,然后删除另一个!此链接已断开: