Android 使用WiFi打印

最近在做项目时yon用到系统WiFida'y打印功能,网上找了各类demo都没办法解决打印问题,故写这篇博客来帮大家跳坑

一、简介

Android从4.4 (KitKat,api-19)开始系统就开始支持打印功能,已经内置打印框架,通过安装打印对应的打印插件就能实现简单的打印功能。下面就简单介绍PDF打印。

二、实现

1、安装插件

1)Android下载相关的打印插件,如HP、Mopria PrintService等;Mopria PrintService是支持市面上主流的打印几。

2)安装完成后,系统设置 –>高级设置 -> 打印–> 打印服务,可以看到相关的服务,进入,选择打开,会自动搜索网络中的打印机。

2、代码实现

1)调用系统打印

private void doPrint(String filePath) {
    PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
    MyPrintPdfAdapter myPrintAdapter = new MyPrintPdfAdapter(filePath);
    printManager.print("jobName", myPrintAdapter, null);

}

 2)

打印适配器会与Android的打印框架相连接,并会处理打印过程的每一个步骤。这个过程要求用户在创建文档打印之前选择打印机及相关的打印选项。这些过程会影响最终的输出结果,就像用户选择了不同打印能力,不同的页面尺寸,不同的页面方向一样。随着这些选项的设置,打印框架会要求适配器展示并生成一个打印文稿,为最终的打印做准备。一旦用户按下了打印按钮,打印框架会拿到最终的打印文档然后交付给打印提供者以便打印。
 

public class MyPrintPdfAdapter extends PrintDocumentAdapter {
    private String mFilePath;
 
    public MyPrintPdfAdapter(String file) {
        this.mFilePath = file;
    }
 
    @Override
    public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, 
                         CancellationSignal cancellationSignal,
                         LayoutResultCallback callback, Bundle extras) {
        if (cancellationSignal.isCanceled()) {
            callback.onLayoutCancelled();
            return;
        }
        PrintDocumentInfo info = new PrintDocumentInfo.Builder("name")
                .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
                .build();
        callback.onLayoutFinished(info, true);
    }
 
    @Override
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, 
                        CancellationSignal cancellationSignal,
                        WriteResultCallback callback) {
        InputStream input = null;
        OutputStream output = null;
 
        try {
 
            input = new FileInputStream(mFilePath);
            output = new FileOutputStream(destination.getFileDescriptor());
 
            byte[] buf = new byte[1024];
            int bytesRead;
 
            while ((bytesRead = input.read(buf)) > 0) {
                output.write(buf, 0, bytesRead);
            }
 
            callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();           
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            try {
                input.close();                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

你可能感兴趣的:(Android,分享)