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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top