开发环境:android studio 3.5.1、HbuilderX、jdk1.7

官方文档:https://nativesupport.dcloud.net.cn/NativePlugin/course/android

一、下载官方示例

https://nativesupport.dcloud.net.cn/AppDocs/download/android

导入示例到AS中,并将uniapp示例工程源码拷贝到HbuilderX的工程目录中,引入HbuilderX

也可以自己在HbuilderX新建自己的页面,我这里是自己新建的页面,和官方有所不同

二、原生打印插件开发

新建一个模块,包名和官方相似

插件相关代码
public class PrinterModule extends WXModule {

private static final String TAG=PrinterModule.class.getName ();
    private PrintUtil util;

public int number=1000000001; // 初始化票据流水号 Initial bill serial number

public String MARK_ENABLE="mark_enable";
    // 字体
    public String FONT_SIZE="font_size";
    // 是否加粗
    public String FONT_BOLD="font_bold";
    // 浓度 25 - 39
    public String FONT_LEVEl="font_level";
    // 退纸距离
    public String BACK_LENGTH="back_length";
    // 编码格式 1、2
    public String ENCODE="encode";
    // 对齐方式
    public String ALIGNMODE="align_mode";
    // 空格
    public String TAB_LENGTH="tab_length";
    // 转行
    public String LINE_LENGTH="line_length";

// 文本
    public String TITLE="title";
    public String CONTENT="content";

public String LEFT_TEXT="left_text";
    public String CENTER_TEXT="center_text";
    public String RIGHT_TEXT="right_text";

// 二维码
    public String QR_TEXT="qr_text";
    public String QR_HEIGHT="qr_height";
    public String QR_WIDTH="qr_width";

// 条码
    public String BARCODE_TEXT="barcode_text";
    public String BARCODE_HEIGHT="barcode_height";
    public String BARCODE_WIDTH="barcode_width";

// 图片
    public String IMG_BASE64="img_base64";

@Override
    public void onActivityResume() {
        super.onActivityResume ();
    }

@Override
    public void onActivityCreate() {
        super.onActivityCreate ();
        Log.e (TAG, "onActivityCreate: ");
    }

//run JS thread
    @JSMethod(uiThread=false)
    public JSONObject testSyncFunc() {
        JSONObject data=new JSONObject ();
        data.put ("code", "success");
        return data;
    }

@JSMethod(uiThread=false)
    public JSONObject initPrinter() {
        Log.e (TAG, "initPrinter: ");
        JSONObject data=new JSONObject ();
        try {
            util=new PrintUtil ("GB2312");
            util.setPrintEventListener (new PrintUtil.OnPrintEventListener () {
                @Override
                public void onPrintStatus(int state) {
                    number+=1; // 流水号自加1 Serial number plus 1
                    Map<String,Object> params=new HashMap<> ();
                    params.put("key",state);
                    mWXSDKInstance.fireGlobalEventCallback("myEvent", params);
                }

@Override
                public void onVersion(String s) {
                    Log.e (TAG, "onVersion: "+s);
                }
            });

} catch (IOException e) {
            e.printStackTrace ();
            data.put ("code", "error");
        }
        data.put ("code", "success");
        return data;
    }

@JSMethod(uiThread=false)
    public void closePrinter() {
        SerialManager.getClient ().close ();
    }

@JSMethod(uiThread=false)
    public void setFontSize(JSONObject options) {
        try {
            Integer fontSize=options.getInteger (FONT_SIZE);
            Log.e (TAG, "setFontSize: "+fontSize);
            if (fontSize == 0) {
                util.printFontSize (MODE_ENLARGE.NORMAL);
            } else if (fontSize == 1) {
                util.printFontSize (MODE_ENLARGE.HEIGHT_DOUBLE);
            } else if (fontSize == 2) {
                util.printFontSize (MODE_ENLARGE.HEIGHT_WIDTH_DOUBLE);
            }
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void setTextBold(JSONObject options) {
        try {
            boolean bold=options.getBoolean (FONT_BOLD);
            Log.e (TAG, "setTextBold: "+bold);
            util.printTextBold (bold);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void setConcentration(JSONObject options) {
        try {
            Integer level=options.getInteger (FONT_LEVEl);
            Log.e (TAG, "setConcentration: "+level);
            util.printConcentration (level);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void setBackPaper(JSONObject options) {
        try {
            Integer length=options.getInteger (BACK_LENGTH);
            Log.e (TAG, "setBackPaper: "+length);
            util.printBackPaper (length);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void setEncode(JSONObject options) {
        try {
            Integer encode=options.getInteger (ENCODE);
            Log.e (TAG, "setEncode: "+encode);
            if (encode == 1) {
                util.printEncode (2);
            } else if (encode == 2) {
                util.printEncode (3);
            }
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printEnableMark(JSONObject options){
        try {
            boolean enable = options.getBoolean (MARK_ENABLE);
            util.printEnableMark (enable);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printGoToNextMark(){
        try {
            util.printGoToNextMark ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printAlignment(JSONObject options) {
        try {
            Integer mode=options.getInteger (ALIGNMODE);
            Log.e (TAG, "printAlignment: "+mode);
            if (mode == ALIGN_MODE.ALIGN_LEFT.Get ()) {
                util.printAlignment (ALIGN_MODE.ALIGN_LEFT);
            } else if (mode == ALIGN_MODE.ALIGN_CENTER.Get ()) {
                util.printAlignment (ALIGN_MODE.ALIGN_CENTER);
            } else if (mode == ALIGN_MODE.ALIGN_RIGHT.Get ()) {
                util.printAlignment (ALIGN_MODE.ALIGN_RIGHT);
            }

} catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printState() {
        try {
            util.printState ();
            Thread.sleep (100);
        } catch (IOException e) {
            e.printStackTrace ();
        } catch (InterruptedException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printStartNumber() {
        try {
            Log.e (TAG, "printStartNumber: ");
            util.printStartNumber (number);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printEndNumber() {
        try {
            Log.e (TAG, "printEndNumber: ");
            util.printEndNumber ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printFeatureList() {
        try {
            Log.e (TAG, "printFeatureList: ");
            util.printFeatureList ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void resetPrint() {
        try {
            Log.e (TAG, "resetPrint: ");
            util.resetPrint ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printTabSpace(JSONObject options) {
        try {
            Integer tabLength=options.getInteger (TAB_LENGTH);
            Log.e (TAG, "printTabSpace: "+tabLength);
            util.printTabSpace (tabLength);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printLine(JSONObject options) {
        try {
            Integer line_length=options.getInteger (LINE_LENGTH);
            Log.e (TAG, "printLine: "+line_length);
            util.printLine (line_length);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printDashLine() {
        try {
            Log.e (TAG, "printDashLine: ");
            util.printDashLine ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printText(JSONObject options) {
        try {
            String content=options.getString (CONTENT);
            Log.e (TAG, " content "+content);
            util.printText (content);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printTwoColumn(JSONObject options) {
        try {
            String title=options.getString (TITLE);
            String content=options.getString (CONTENT);
            Log.e (TAG, "title: "+title+" content "+content);
            util.printTwoColumn (title, content);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

@JSMethod(uiThread=false)
    public void printThreeColumn(JSONObject options) {
        try {
            String left_text=options.getString (LEFT_TEXT);
            String center_text=options.getString (CENTER_TEXT);
            String right_text=options.getString (RIGHT_TEXT);
            Log.e (TAG, "left_text: "+left_text+" center_text "+center_text+" right_text "+right_text);
            util.printThreeColumn (left_text, center_text, right_text);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

/**
     * 打印二维码
     *
     * @param options
     */
    @JSMethod(uiThread=false)
    public void printQR(JSONObject options) {
        try {
            Log.e (TAG, "printQR: ");
            String text=options.getString (QR_TEXT);
            Integer height=options.getInteger (QR_HEIGHT);
            Integer width=options.getInteger (QR_WIDTH);
            Log.e (TAG, "QR left_text: "+text+" center_text "+height+" right_text "+width);
            util.printQR (text, height, width);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

/**
     * 打印条码
     */
    @JSMethod(uiThread=false)
    public void printBarcode(JSONObject options) {
        try {
            Log.e (TAG, "printBarcode: ");
            String text=options.getString (BARCODE_TEXT);
            Integer height=options.getInteger (BARCODE_HEIGHT);
            Integer width=options.getInteger (BARCODE_WIDTH);
            Log.e (TAG, "Barcode left_text: "+text+" center_text "+height+" right_text "+width);
            util.printBarcode (text, height, width);
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

/**
     * 打印图片
     */
    @JSMethod(uiThread=false)
    public void printBitmap(JSONObject options) {
        try {
            String base64=options.getString (IMG_BASE64);
            byte[] decodedString=Base64.decode (base64.trim (), Base64.DEFAULT);
            Bitmap bitmap=BitmapFactory.decodeByteArray (decodedString, 0, decodedString.length);
            BitmapUtils.compressPic (bitmap,384,bitmap.getHeight ());
            util.printBitmap (bitmap);
        } catch (IOException e) {
            e.printStackTrace ();
        }

}
}

三、插件使用

1、使用AS将插件模块生成aar包,并在HbuilderX项目中新建nativeplugins

2、新建插件目录,所需资源全面放入,文件夹名称和package.json中定义的一样

3、package.json文件

{
    "name": "LcPrinter",
    "id": "LcPrinter",
    "version": "1.0.0",
    "description": "打印插件",
    "_dp_type":"nativeplugin",
    "_dp_nativeplugin":{
        "android": {
            "plugins": [
                {
                    "type": "module",
                    "name": "LcPrinter",
                    "class": "uni.dcloud.io.uniplugin_lcprint.PrinterModule"
                }
            ],
            // "dependencies": [
            //         "printer_release_v1.0_3.aar"
            //  ],
             "abis": [
                 "armeabi-v7a",
                 "arm64-v8a",
                 "x86"
             ],
            "integrateType": "aar",
            "minSdkVersion" : 15
        }
    }
}

4、上传插件市场操作请参考官网

5、页面引用

const printer = uni.requireNativePlugin('LcPrinter');

四、成品展示

项目示例:链接:https://pan.baidu.com/s/12n-q3CvUvA8WJ2VA4fftEg 
提取码:hawl

uni-app原生打印插件开发相关推荐

  1. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  2. uni app map 地图 漂浮问题及方案

    uni app map 地图 漂浮问题及方案 文章页有图片导致的问题,图片没加载出来,导致文章内容高度不固定,如果图片没加载出来,高度就是0,如果此时开始加载map,那么map就在那里加载,map原生 ...

  3. uni app 视频播放功能

    视频播放功能,需求:编译成纯h5网页,运行在任意容器里,如浏览器.安卓原生和iOS等 媒体组件video 首先使用video组件,然后高度需要自己设置 uni.createVideoContext 官 ...

  4. 未配置appkey或配置错误,uniapp原生安卓插件开发

    开发安卓原生插件 一.官方文档 1.https://nativesupport.dcloud.net.cn/NativePlugin/course/android 2.下载对应的SDK.工程文件 二. ...

  5. Android uni app 列表底部白条解决方案

    uni app中android打开本地vue的列表会发现,底部有条白边. vue通过uni.getSystemInfoSync();方法获取系统信息,首次取值对,再次取值就出错 uni app每次启动 ...

  6. vant 验证手机号_【uni app】vant weapp的引入和部分详细调用(表单输入框、验证码、弹出层搭配选择器、地图)...

    本次小程序的开发使用uni app+vant weapp,vant weapp如何引用和部分组件使用方法如下 引入 在github(https://github.com/youzan/vant-wea ...

  7. 切换 uniapp_万能前端框架uni app初探03:底部导航开发

    前言 本节我们使用uni app的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的. 一.基础知识 1.tabBar 如果应用是一个多 tab 应用,可以通过 tabB ...

  8. 如何选择Web APP与Native App原生开发模式的区别(转)

    APP开发模式通常分为Web APP与Native APP原生模式两种,这两种模式均各自有自己的优势,到底是采用Native App开发还是采用Web App开发一直是业界争论的焦点,但是随着HTML ...

  9. android没有界面app,Android离线打包 app处于原生界面 切换到桌面再点击app 原生界面被关闭...

    Android离线打包环境, 当app打开原生界面时,点击Home键到桌面,然后点击桌面图标打开app,原生界面被关闭,无论原生界面层级多少,都是返回到io.dcloud.PandoraEntry这个 ...

最新文章

  1. 云优后台提交显示parsererror_【Shopee新手开店】卖家后台管理及设置
  2. 我国IPv6规模要达到世界第一
  3. linux中sh基本语法
  4. Java服务启动慢,JVM预热的问题,我在k8s上改进了
  5. 民主湖呀,不知道是好看还是破烂
  6. 开发留言本,学习笔记
  7. 动态更改屏幕方向LANDSCAPE与PORTRAIT 转
  8. 一次违反常规的Java大厂面试经历,重难点整理
  9. jQuery 源码系列(二)init 介绍
  10. RAR与ZIP区别,哪个比较好用!
  11. 新浪公司总裁兼首席执行官 曹国伟
  12. Eclipse 提示代码时弹出错误弹框问题
  13. 为什么越学反而越蠢?碎片化学习是个骗局
  14. Navicat Premium 12.1.15的激活
  15. 以太坊开发入门-ERC20合约
  16. 电磁波的穿透能力总结
  17. HC-SR505红外感应模块驱动(STM32)
  18. 2022年最新广东建筑安全员模拟题库及答案
  19. STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法
  20. 学计算机编程学校河南,黄亚博-计算机与信息工程学院官网

热门文章

  1. android switch_dev
  2. E/InputDispatcher: channel '32d434a4 Toast (server)' ~ Channel is unrecoverably broken and will be d
  3. 论文的数据一般在哪里找?
  4. java操作word,添加页眉,页眉图片,替换书签,添加水印(全)
  5. 软件设计模式- 命令模式
  6. Qt之如何获取主窗口的指针
  7. 索引失效的10个原因
  8. 我的世界电脑版加模组JAVA,我的世界java版mod
  9. 应用罗尔定理的证明题总结含例题
  10. Python代码游戏————星球大战