Возможно ли напечатать веб-страницу в Android без всплывающего окна?

Я использую опцию принтера по умолчанию для Android (версия для Android 4.4)

Я хочу обойти всплывающее окно адаптера printManager. как скрыть всплывающее окно и дать прямую печать на принтер в Android

2 ответа

Решение

Вы не можете расширить класс PrintManager. Это окончательный класс. Пожалуйста, проверьте ссылку ниже

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/print/PrintManager.java

Эти ребята разработали свои собственные рамки для печати. ​​Где они создают свой собственный диалог. Посмотрите

http://apf.isb-vietnam.com/index.php/programming-with-apf.html

Мне кажется, что ответ - да.

Здесь print() метод из Android PrintManager учебный класс:

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) который extends PrintManager а также @Override print() метод в этом. Затем используйте приведенный выше код, но удалите эту строку:

mContext.startIntentSender(intent, null, 0, 0, 0);

Затем получите экземпляр MyPrintManager Класс с помощью кода ниже:

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

Вы можете попробовать это, хотя я не уверен, что это работает, потому что я не проверял это. Пожалуйста, ответьте с результатом, и я постараюсь помочь вам в дальнейшем, если это не сработало.

Другие вопросы по тегам