Возможно ли напечатать веб-страницу в Android без всплывающего окна?
Я использую опцию принтера по умолчанию для Android (версия для Android 4.4)
Я хочу обойти всплывающее окно адаптера printManager. как скрыть всплывающее окно и дать прямую печать на принтер в Android
2 ответа
Вы не можете расширить класс PrintManager. Это окончательный класс. Пожалуйста, проверьте ссылку ниже
Эти ребята разработали свои собственные рамки для печати. Где они создают свой собственный диалог. Посмотрите
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);
Вы можете попробовать это, хотя я не уверен, что это работает, потому что я не проверял это. Пожалуйста, ответьте с результатом, и я постараюсь помочь вам в дальнейшем, если это не сработало.