文章目录

  • 【Android】Android 集成商米内置打印机打印票据
    • 1、集成商米打印依赖
    • 2、规范接口接口
    • 3、使用到的相关对象以及工具类
    • 4、MainActivity初始化接口
    • 5、Uniapp调用方法
  • 技术分享区

【Android】Android 集成商米内置打印机打印票据

1、集成商米打印依赖

也可以去Maven看一下有没得最新的版本

implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'implementation group: 'com.sunmi', name: 'printerlibrary', version: '1.0.14'

2、规范接口接口

个人习惯,先写接口,再写功能实现类

import android.content.Context;/*** sunMi 内置打印机** @author Tellsea* @date 2021-8-2*/
public interface SunMiPrintingService {/*** 连接打印机*/void bindServicePrinting();/*** 预结账单** @param param*/void beforeOrderPrinting(String param);}

实现接口

/*** @author Tellsea* @date 2021-8-11*/
public class SunMiPrintingServiceImpl implements SunMiPrintingService {private SunmiPrinterService sunmiPrinterService;/*** 连接打印机*/@Override@JavascriptInterfacepublic void bindServicePrinting() {try {boolean result = InnerPrinterManager.getInstance().bindService(MainActivity.CONTEXT, new InnerPrinterCallback() {@Overrideprotected void onConnected(SunmiPrinterService service) {//这⾥即获取到绑定服务成功连接后的远程服务接⼝句柄//可以通过service调⽤⽀持的打印⽅法if (service != null) {sunmiPrinterService = service;}}@Overrideprotected void onDisconnected() {//当服务异常断开后,会回调此⽅法,建议在此做重连策略}});if (!result) {Toast.makeText(MainActivity.CONTEXT, "没有绑定到服务,请检查机型是否支持", Toast.LENGTH_LONG).show();} else {Toast.makeText(MainActivity.CONTEXT, "打印机连接成功", Toast.LENGTH_LONG).show();}} catch (InnerPrinterException e) {e.printStackTrace();}}/*** 预结账单** @param param*/@Override@JavascriptInterfacepublic void beforeOrderPrinting(String param) {System.out.println("预结单参数:" + param);if (param.isEmpty()) {Toast.makeText(MainActivity.CONTEXT, "打印参数不能为空", Toast.LENGTH_LONG).show();}OrderPrinting entity = new Gson().fromJson(param, OrderPrinting.class);try {if (sunmiPrinterService == null) {Toast.makeText(MainActivity.CONTEXT, "商米打印机:打印对象为空", Toast.LENGTH_LONG).show();return;}if (entity.getOrderDetailList().isEmpty()) {Toast.makeText(MainActivity.CONTEXT, "商米打印机:商品为空", Toast.LENGTH_LONG).show();return;}sunmiPrinterService.printerInit(null);int paper = sunmiPrinterService.getPrinterPaper();sunmiPrinterService.setAlignment(1, null);sunmiPrinterService.printTextWithFont("预结账单 " + entity.getTakeOrderNumber() + "\n", null, 48F, null);sunmiPrinterService.printTextWithFont(entity.getStoreName() + "\n", null, 40F, null);sunmiPrinterService.printText("    \n", null);setInterval(paper);sunmiPrinterService.setAlignment(0, null);sunmiPrinterService.setPrinterStyle(WoyouConsts.SET_LINE_SPACING, 0);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printTextWithFont("桌台号:" + entity.getDeskName() + "\n", null, 28F, null);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printTextWithFont("配送类型:" + entity.getDeskType() + "\n", null, 28F, null);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printTextWithFont("订单号:" + entity.getOrderNumber() + "\n", null, 28F, null);sunmiPrinterService.printText("    \n", null);setInterval(paper);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.setPrinterStyle(WoyouConsts.ENABLE_BOLD, WoyouConsts.ENABLE);String[] txts = new String[]{"商品", "数量", "单价"};int[] width = new int[]{2, 2, 2};int[] align = new int[]{0, 1, 2};sunmiPrinterService.printColumnsString(txts, width, align, null);sunmiPrinterService.setPrinterStyle(WoyouConsts.ENABLE_BOLD, WoyouConsts.DISABLE);for (OrderPrintingDetail item : entity.getOrderDetailList()) {sunmiPrinterService.printText("    \n", null);if (IntegerUtils.eq(item.getSpuAttrType(), 2)) {txts[0] = isEmptyValue(item.getSpuTitle());txts[1] = "";txts[2] = "";sunmiPrinterService.printColumnsString(txts, width, align, null);txts[0] = isEmptyValue(item.getSpuDescription());} else {txts[0] = isEmptyValue(item.getSpuTitle());}txts[1] = isEmptyValue(item.getNumber());txts[2] = isEmptyValue(item.getSpuSellPrice());sunmiPrinterService.printColumnsString(txts, width, align, null);if (item.getSpuRemark() != null) {txts[0] = isEmptyValue(item.getSpuRemark());txts[1] = "";txts[2] = "";sunmiPrinterService.printColumnsString(txts, width, align, null);}}sunmiPrinterService.printText("    \n", null);setInterval(paper);if (entity.getOrderRemark() != null) {sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printTextWithFont("订单备注:" + entity.getOrderRemark() + "\n", null, 28F, null);}sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printTextWithFont("预付金额:" + entity.getOriginPrice() + "\n", null, 40F, null);setInterval(paper);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.printText("    \n", null);sunmiPrinterService.cutPaper(null);} catch (RemoteException e) {Toast.makeText(MainActivity.CONTEXT, "打印异常:" + e.getMessage(), Toast.LENGTH_LONG).show();e.printStackTrace();}}/*** 判断参数是否为空** @param value* @return*/public String isEmptyValue(Object value) {if (value == null) {return "";}return String.valueOf(value);}/*** 设置间隔** @param paper* @throws RemoteException*/public void setInterval(int paper) throws RemoteException {if (paper == 1) {sunmiPrinterService.printText("--------------------------------\n", null);} else {sunmiPrinterService.printText("------------------------------------------------\n", null);}}
}

3、使用到的相关对象以及工具类

订单对象

/*** 预结账单** @author Tellsea* @date 2021/07/22*/
@Data
@Accessors(chain = true)
public class OrderPrinting {private Long id;private String storeName;private String takeOrderNumber;private String deskName;private String deskType;private String orderNumber;private String serialNumber;private List<OrderPrintingDetail> orderDetailList;private BigDecimal originPrice;private BigDecimal reducePrice;private BigDecimal integerPrice;private String payWayName;private BigDecimal payMoney;private String placeOrderTime;private String payTime;private String orderRemark;
}

订单商品对象

/*** 商品信息** @author Tellsea* @date 2021/07/22*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class OrderPrintingDetail {private Long spuAttrType;private String spuTitle;private String spuDescription;private BigDecimal number;private BigDecimal spuSellPrice;private String spuRemark;}

使用到的比较工具类

/*** Integer 类型工具类* 原符号       <       <=      >       >=      <>* 对应函数    lt()     le()    gt()    ge()    ne()** @author Tellsea* @date 2021/04/12*/
public class IntegerUtils {/*** 等于** @param val1* @param val2* @return*/public static boolean eq(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() == val2.intValue();}return false;}public static boolean eq(Long val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() == val2.intValue();}return false;}/*** 大于** @param val1* @param val2* @return*/public static boolean gt(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() > val2.intValue();}return false;}public static boolean gt(Long val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() > val2.intValue();}return false;}/*** 小于** @param val1* @param val2* @return*/public static boolean lt(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() < val2.intValue();}return false;}/*** 大于等于** @param val1* @param val2* @return*/public static boolean ge(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return (val1.intValue() > val2.intValue()) || (val1.intValue() == val2.intValue());}return false;}/*** 小于等于** @param val1* @param val2* @return*/public static boolean le(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return (val1.intValue() < val2.intValue()) || (val1.intValue() == val2.intValue());}return false;}/*** 不等于** @param val1* @param val2* @return*/public static boolean ne(Integer val1, Integer val2) {if (val1 != null && val2 != null) {return val1.intValue() != val2.intValue();}return false;}
}

4、MainActivity初始化接口

// 商米打印机初始化
SunMiPrintingService sunmiPrintingService = new SunMiPrintingServiceImpl();
sunmiPrintingService.bindServicePrinting();

5、Uniapp调用方法

在接口方法已经使用了@JavascriptInterface注解,可以使用JavaScript直接调用

/*** 打印制作单* @param param*/
function makeOrderPrinting(param) {window.sunMiPrinting.makeOrderPrinting(param);
}

技术分享区

【Android】Android 集成商米内置打印机打印票据相关推荐

  1. 【Uniapp 原生插件】商米内置打印机插件

    文章目录 商米内置打印机插件 插件需求 插件介绍 使用案例 获取插件 连接服务 断开服务 测试打印 接口列表 商米内置打印机插件 插件地址:https://ext.dcloud.net.cn/plug ...

  2. android 连接商米POSV1内置打印机

    最近接触连接打印机的比较多,就写下来吧 连接商米POSV1的打印机: 商米官网上有开发文档,具体可以看下,我只写下步骤: (1)因为我用的AIDL的方法,所以先把这3个文件放入到项目中 (2)创建线程 ...

  3. 【Android】Android 集成商米钱箱

    文章目录 [Android]Android 集成商米钱箱 1.集成商米打印依赖 2.规范调用接口 3.MainActivity初始化接口 4.Uniapp调用方法 技术分享区 [Android]And ...

  4. 【Android】Android 集成佳博80打印机打印票据

    文章目录 [Android]Android 集成佳博80打印机打印票据 1.集成佳博80打印机依赖 2.规范调用接口 3.使用到的相关对象以及工具类 4.MainActivity初始化接口 5.Uni ...

  5. Android 项目集成有米 SDK 添加广告

    集成 SDK 的基本配置 步骤一 步骤二 步骤三 步骤四 集成 SDK 的无积分广告 步骤五 步骤六 步骤七 步骤八 步骤九 我们有时候需要在app里面,添加一些广告,作为额外的一些收入,那么该怎么办 ...

  6. android系统版本卸掉,使用内置软件卸载最新版本的Android

    Power Software Park提供了最新版本的内置软件卸载Android. 一个实用且功能强大的手机软件,它可以帮助您卸载手机中无用的系统程序,使您的手机更加简单方便,并且不会被太多无用的混乱 ...

  7. flyme7 android彩蛋,Flyme 7内置彩蛋功能:520教你如何脱颖而出

    原标题:Flyme 7内置彩蛋功能:520教你如何脱颖而出 5月20日是一个特殊的日子,逐渐演变为"网络情人节",或许有一部分单身伙伴们会遭到暴击伤害,估计朋友圈会被大捧的玫瑰花刷 ...

  8. android内置sd卡挂载过程,Android获取机身存储、内置SD卡与外置TF卡路径

    获取机身存储路径(可以通过openFileInput,openFileOutput进行操作) String path=Environment.getDataDirectory().getAbsolut ...

  9. android存储文件数据恢复,安卓手机内置储存中的照片误删怎么恢复

    科技迅速发展随之而来的是人们生活习惯的改变,手机从一个简单的交流工具,变成生活中必备品,手机购物.手机支付.手机传送文件浏览网页.手机分享视频.手机拍照.手机里面满满的簇拥了太多的东西,定期清理的必然 ...

最新文章

  1. 一只53万!波士顿动力网红机器狗开售,充电器价格1万多!
  2. 如何扩容单台服务器的存储容量?
  3. 移动端1px像素的设置?
  4. “21天教你学会C++”
  5. 诡异的防火墙故障,能PING通,但访问ORACLE不稳定
  6. 沈向洋谈文献阅读(转载)
  7. 【Android】Mac安装EasyTether导致无法识别设备的问题
  8. Redis进阶不得不了解的内存优化细节
  9. Java Web学习视频
  10. springboot添加ojdbc6报错
  11. ubuntu nsight使用
  12. repo clean
  13. 【土旦】 使用Vant 的Uploader 上传图片 重定义返回格式 使用FormData格式提交
  14. 《王者荣耀游戏服务器架构演进(完整版)》读后感
  15. 数据结构之散列表(七)
  16. vue+vant图片上传压缩图片大小
  17. 肖申克的救赎 -Hope
  18. 图像处理——Fast AutoAugment
  19. 聊一聊AI发展的过去现在与未来-由OpenAI之ChatGPT想到的
  20. 计算机软件设计硕士生导师,孙明副教授、硕士生导师-山东大学软件与数据工程研究中心...

热门文章

  1. 基于51单片机多功能智能心率检测仪设计(毕设课设)
  2. 输入分钟输出小时python_python格式化输出时间
  3. 298本R语言书籍免费送!!!
  4. CentOS7.2系统上搭建JDKTomcat详细步骤
  5. 清理服务器多余的图片(文件、数据)
  6. ASM - 指令01 MOV
  7. 怎样把xp计算机语言改为英文,如何把windows电脑的默认语言改成英文?
  8. Franka Emika 机械臂在ROS下控制
  9. 最快捷有效的Au贴唱流程攻略
  10. JMM内存模型 多线程三大特性