Android使用局域网打印机生成打印任务

生成打印任务时,需要的关键类为PrintManger和PrintJob
1、 PrintManager printManager = (PrintManager) ctx.getSystemService(Context.PRINT_SERVICE);
生成printManger对象
2、生成打印的适配器 其中filename为需要打印文件的路径

 private PrintDocumentAdapter pda = new PrintDocumentAdapter() {@Overridepublic void onStart() {super.onStart();super.onStart();if (listener != null) {listener.onShow();}}@Overridepublic void onFinish() {super.onFinish();}@Overridepublic void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, android.os.CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {if (cancellationSignal.isCanceled()) {callback.onLayoutCancelled();return;}PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();callback.onLayoutFinished(pdi, true);}@Overridepublic void onWrite(PageRange[] pages, ParcelFileDescriptor destination, android.os.CancellationSignal cancellationSignal, WriteResultCallback callback) {InputStream input = null;OutputStream output = null;try {input = new FileInputStream(filePath);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 ee) {//Catch exception} catch (Exception e) {//Catch exception} finally {try {if (null != input) input.close();if (null != output) output.close();} catch (IOException e) {System.out.println("IOException - " + e.getMessage());}}}};

3、使用 printManager.print(jobName, pda, null);
因为默认的PrintManager的打印时不能及时返回当前打印任务的状态。因此需要自己进行轮询查询当前任务状态

  TimerTask task = new TimerTask() {public void run() {if (print_out_time > 0) {print_out_time--;LogUtils.d(TAG, "print callbake timeout");if (mPrintJob.isStarted()) {LogUtils.d(TAG, "isStarted");if (isFirst) {if (listener != null) {listener.onClickPrint();listener.onPrintStart();}}}if (mPrintJob.isQueued() && isFirst) {LogUtils.d(TAG, "isQueued");if (listener != null) {listener.onClickPrint();}isFirst = false;}if (mPrintJob.isCompleted()) {LogUtils.d(TAG, "isCompleted");if (null != listener) {listener.onPrintOK();}stopTimer();}if (mPrintJob.isBlocked()) {LogUtils.d(TAG, "isBlocked");
//                        if (null != listener) {//                            listener.onPrintBlock();
//                        }
//                        stopTimer();}if (mPrintJob.isFailed()) {LogUtils.d(TAG, "isFailed");if (null != listener) {listener.onPrintFailed();}stopTimer();}if (mPrintJob.isCancelled()) {LogUtils.d(TAG, "isCancelled");if (null != listener) {listener.onClickCancel();}stopTimer();}} else {LogUtils.d(TAG, "isFailed");if (null != listener) {listener.onPrintFailed();mPrintJob.cancel();}stopTimer();}}};mTimer = new Timer();mTimer.schedule(task, 0, 1000);

在实际系统执行打印任务时,是将生成的printJob发送给framework层的PrintSpooler.apk去具体执。该apk主要代码就是dialog的形式确定打印的纸张尺寸设置。然后是打印机的打印驱动完成数据交互,应用层不感知。
当时使用的是惠普和三星的打印机。apk的驱动可以去对应商城支持下载的

Android使用局域网打印机生成打印任务相关推荐

  1. android连接小票打印机,打印小票数据的两种模式

    为了开发android无线点餐系统,需要用到打印小票任务,根据网上查找资料所得,学习了两种方法,一种为通过tomcat服务连接服务器所连接的打印机打印,一种为直接连接网络打印机打印 一.通过tomca ...

  2. Android sockot连接打印机EPSON ESC/POS指令打印

    sockot连接打印机EPSON ESC/POS指令打印 接了一个需求,需要用Android pad连接打印机进行打印,以前倒是没接触过,这次在网上找了下资料,简单实现了下需求.在这记录下相关代码以及 ...

  3. Android实现PDF预览打印

    最近在做一个项目,需要用到android手机连接打印机进行打印的功能,目前在网上找到的教程介绍的都是蓝牙连接热敏打印机(pos机大小的打印机)和蓝牙打印机,如果连接日常所见到的网络打印机,进行打印,很 ...

  4. Android 实现系统打印机打印图片,文本,以及二维码生成与解析

    打码机:扫码,生成打印自定义标签   一.Android 打印机要支持,网络.WiFi :手机与打印机在同一网络下才行,本文用WiFi连接 打开系统打印服务: 设置--更多设置--打印--选择默认打印 ...

  5. android app连接打印机程序,Android App新增打印机支持 手机打印就是爽

    初次看到这个东西,可能会误人为是移动硬盘或某人的午餐盒,但实际上,这是一台PoGo3*4打印机,既然是打印机那就是用来打印的喽,可是连接线在什么地方?这玩意到底怎么用,谁来教教我? 其实很简单,一台P ...

  6. android 实现打印功能,Android通过OTG线连接打印机实现打印功能

    一.创建demo调用PrinterShare服务,虽然能找到相应的类和方法但调用后没有反应 //打印图片,进入PrinterShare打印图片预览界面 public static void print ...

  7. android打印功能,Android通过OTG线连接打印机实现打印功能

    一.创建demo调用PrinterShare服务,虽然能找到相应的类和方法但调用后没有反应 //打印图片,进入PrinterShare打印图片预览界面 public static void print ...

  8. Android Zebra斑马打印机 打印面单不清楚 解决方法

    刚开始的效果. 字体模糊. 分析原因: 1.打印机的打印浓度太低 2.文本字体不对 3.bitmap的问题 因为这个面单是通过view 获取到bitmap再喂给打印机打印的 下载打印机的驱动,设置打印 ...

  9. Android 蓝牙连接打印机打印网络图片

    实现蓝牙连接打印机打印网络图片 经过自己一下午加一个小时的时间整理出来,希望能帮助到各位码兄弟! 主要分为以下几步: 将网络图片URL转为bitmap :其中需要进行网络请求,不可在主线程中进行,需另 ...

  10. 无条码商品新建商品档案,搭配蓝牙便携打印机移动打印条码标签

    null无条码商品的商品档案新建,并打印条码标签,即可实现仓库条码管理,扫码入库,出库,盘点等操作., 视频播放量 1.弹幕量 0.点赞数 0.投硬币枚数 0.收藏人数 0.转发人数 0, 视频作者 ...

最新文章

  1. 关于matlab的单精度与双精度
  2. 业界首发|阿里云重磅发布云原生架构白皮书
  3. Leet Code OJ 189. Rotate Array [Difficulty: Easy]
  4. LeetCode 1577. 数的平方等于两数乘积的方法数(双指针)
  5. netcat、nc工具随记
  6. groovy 对 list 排序
  7. Linux Ubuntu jdk(环境变量)配置
  8. Python代码调试之异常回溯
  9. Node对CommonJS模块的实现
  10. EasyUi模糊匹配搜索框combobox
  11. AE Pixel Sorter 2 for Mac破解教程
  12. 平面关系:平行,垂直,夹角判定
  13. Ubuntu18.04安装cmake(附免费下载cmake)。
  14. 微信聊天记录里的文件又失效了?试试这个文件同步开源项目吧
  15. 【黑客编程】手把手教你编写POC
  16. 通过金矿模型介绍动态规划(转)
  17. 阿里云服务器web项目启动连接mysql_eclipse web项目部署到阿里云服务器
  18. 简单的理解position与anchorPoint
  19. 网络搭建与应用2022国赛环境无误版
  20. 大规模土地利用数据处理新手段:高性能的地理处理建模

热门文章

  1. 《经济学通识》一、前言
  2. linux高速串口收发程序,Linux的DMA高速串口驱动的设计
  3. 手机控制树莓派驱动投影仪DLPDLCR230NPEVM
  4. 涨姿势 , JavaScript 玩转多线程编程~
  5. app模式会被第三方平台模式取代吗_那些逐渐被系统功能取代的第三方APP,你知道多少?...
  6. 一步步教你批量压缩打包文件夹
  7. java面试宝典:留着慢慢看
  8. Limbo模拟器的三两事
  9. python画图方法_python画图的两种方法
  10. 小鸡腿U T6 2013FINAL