【Android】Android 集成商米内置打印机打印票据
文章目录
- 【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 集成商米内置打印机打印票据相关推荐
- 【Uniapp 原生插件】商米内置打印机插件
文章目录 商米内置打印机插件 插件需求 插件介绍 使用案例 获取插件 连接服务 断开服务 测试打印 接口列表 商米内置打印机插件 插件地址:https://ext.dcloud.net.cn/plug ...
- android 连接商米POSV1内置打印机
最近接触连接打印机的比较多,就写下来吧 连接商米POSV1的打印机: 商米官网上有开发文档,具体可以看下,我只写下步骤: (1)因为我用的AIDL的方法,所以先把这3个文件放入到项目中 (2)创建线程 ...
- 【Android】Android 集成商米钱箱
文章目录 [Android]Android 集成商米钱箱 1.集成商米打印依赖 2.规范调用接口 3.MainActivity初始化接口 4.Uniapp调用方法 技术分享区 [Android]And ...
- 【Android】Android 集成佳博80打印机打印票据
文章目录 [Android]Android 集成佳博80打印机打印票据 1.集成佳博80打印机依赖 2.规范调用接口 3.使用到的相关对象以及工具类 4.MainActivity初始化接口 5.Uni ...
- Android 项目集成有米 SDK 添加广告
集成 SDK 的基本配置 步骤一 步骤二 步骤三 步骤四 集成 SDK 的无积分广告 步骤五 步骤六 步骤七 步骤八 步骤九 我们有时候需要在app里面,添加一些广告,作为额外的一些收入,那么该怎么办 ...
- android系统版本卸掉,使用内置软件卸载最新版本的Android
Power Software Park提供了最新版本的内置软件卸载Android. 一个实用且功能强大的手机软件,它可以帮助您卸载手机中无用的系统程序,使您的手机更加简单方便,并且不会被太多无用的混乱 ...
- flyme7 android彩蛋,Flyme 7内置彩蛋功能:520教你如何脱颖而出
原标题:Flyme 7内置彩蛋功能:520教你如何脱颖而出 5月20日是一个特殊的日子,逐渐演变为"网络情人节",或许有一部分单身伙伴们会遭到暴击伤害,估计朋友圈会被大捧的玫瑰花刷 ...
- android内置sd卡挂载过程,Android获取机身存储、内置SD卡与外置TF卡路径
获取机身存储路径(可以通过openFileInput,openFileOutput进行操作) String path=Environment.getDataDirectory().getAbsolut ...
- android存储文件数据恢复,安卓手机内置储存中的照片误删怎么恢复
科技迅速发展随之而来的是人们生活习惯的改变,手机从一个简单的交流工具,变成生活中必备品,手机购物.手机支付.手机传送文件浏览网页.手机分享视频.手机拍照.手机里面满满的簇拥了太多的东西,定期清理的必然 ...
最新文章
- 一只53万!波士顿动力网红机器狗开售,充电器价格1万多!
- 如何扩容单台服务器的存储容量?
- 移动端1px像素的设置?
- “21天教你学会C++”
- 诡异的防火墙故障,能PING通,但访问ORACLE不稳定
- 沈向洋谈文献阅读(转载)
- 【Android】Mac安装EasyTether导致无法识别设备的问题
- Redis进阶不得不了解的内存优化细节
- Java Web学习视频
- springboot添加ojdbc6报错
- ubuntu nsight使用
- repo clean
- 【土旦】 使用Vant 的Uploader 上传图片 重定义返回格式 使用FormData格式提交
- 《王者荣耀游戏服务器架构演进(完整版)》读后感
- 数据结构之散列表(七)
- vue+vant图片上传压缩图片大小
- 肖申克的救赎 -Hope
- 图像处理——Fast AutoAugment
- 聊一聊AI发展的过去现在与未来-由OpenAI之ChatGPT想到的
- 计算机软件设计硕士生导师,孙明副教授、硕士生导师-山东大学软件与数据工程研究中心...