Comment imprimer une vision WebView à l'aide de KITKAT 4.4 Imprimer API via une réflexion?
-
20-12-2019 - |
Question
Je dois prendre en charge l'impression sur des périphériques de Kitkat, mais mon SDK cible est 13 (la modification n'est pas une option).
Spécifiquement, j'ai besoin d'imprimer un webview.
Ceci est l'API d'impression d'un webview: http://developer.android.com/training/printing/html-docs.html
La solution
C'est un ancien mais l'impression est une sorte de utilité afin que cela puisse être bon de fonctionner correctement.(Sans réflexion;))
Un meilleur moyen de travailler avec la version des appareils.Pas de capture d'essai nécessaire, il suffit de ajouter des messages avant le retour ou vous vient de masquer le bouton / menu / ... en fonction du même état.
@TargetApi(Build.VERSION_CODES.KITKAT)
private void createWebPrintJob(WebView webView) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return;
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
// Create a print job with name and adapter instance
String jobName = getString(R.string.app_name) + " Document";
printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
}
Le principe sera exécuté uniquement avec SDK 19 et plus
Autres conseils
Voici ma solution:
public void print(WebView webView) {
//PrintManager
String PRINT_SERVICE = (String) Context.class.getDeclaredField("PRINT_SERVICE").get(null);
Object printManager = mActivity.getSystemService(PRINT_SERVICE);
//PrintDocumentAdapter
Class<?> printDocumentAdapterClass = Class.forName("android.print.PrintDocumentAdapter");
Method createPrintDocumentAdapterMethod = webview.getClass().getMethod("createPrintDocumentAdapter");
Object printAdapter = createPrintDocumentAdapterMethod.invoke(webview);
//PrintAttributes
Class<?> printAttributesBuilderClass = Class.forName("android.print.PrintAttributes$Builder");
Constructor<?> ctor = printAttributesBuilderClass.getConstructor();
Object printAttributes = ctor.newInstance(new Object[] {});
Method buildMethod = printAttributes.getClass().getMethod("build");
Object printAttributesBuild = buildMethod.invoke(printAttributes);
//PrintJob
String jobName = "My Document";
Method printMethod = printManager.getClass().getMethod("print", String.class, printDocumentAdapterClass, printAttributesBuild.getClass());
Object printJob = printMethod.invoke(printManager, jobName, printAdapter, printAttributesBuild);
// Save the job object for later status checking
mPrintJobs.add(printJob);
}
Assurez-vous que cela s'appelle que cela s'appelle sur le fil principal. Notez également: vous devez utiliser un essai attraper.Les appareils qui ne fonctionnent pas 4.4+ s'écraseront si vous ne le faites pas.