diff --git a/.gitignore b/.gitignore index e9dc58d..1201cf9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ .pub/ build/ +/.idea diff --git a/android/build.gradle b/android/build.gradle index 838b87d..e8f4d41 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -3,8 +3,12 @@ version '1.0' buildscript { repositories { - google() - jcenter() + maven { url 'http://maven.aliyun.com/repository/google' } + maven { url 'http://maven.aliyun.com/repository/jcenter' } + maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } + // google() + // jcenter() } dependencies { @@ -14,8 +18,12 @@ buildscript { rootProject.allprojects { repositories { - google() - jcenter() + maven { url 'http://maven.aliyun.com/repository/google' } + maven { url 'http://maven.aliyun.com/repository/jcenter' } + maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } + // google() + // jcenter() flatDir { dirs project(':flutter_sunmi_printer').file('libs') } @@ -28,7 +36,7 @@ android { compileSdkVersion 28 defaultConfig { - minSdkVersion 16 + minSdkVersion 19 } lintOptions { disable 'InvalidPackage' @@ -37,6 +45,7 @@ android { dependencies{ implementation(name: 'payLib', ext: 'aar') + implementation 'com.sunmi:printerlibrary:1.0.9' // https://mvnrepository.com/artifact/com.google.zxing/core compileOnly(name: 'core-3.4.0', ext: 'jar') } diff --git a/android/src/main/aidl/com/sunmi/trans/TransBean.aidl b/android/src/main/aidl/com/sunmi/trans/TransBean.aidl deleted file mode 100755 index dd75b1c..0000000 --- a/android/src/main/aidl/com/sunmi/trans/TransBean.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.sunmi.trans; - -parcelable TransBean; \ No newline at end of file diff --git a/android/src/main/aidl/woyou/aidlservice/jiuiv5/ICallback.aidl b/android/src/main/aidl/woyou/aidlservice/jiuiv5/ICallback.aidl deleted file mode 100755 index 8889807..0000000 --- a/android/src/main/aidl/woyou/aidlservice/jiuiv5/ICallback.aidl +++ /dev/null @@ -1,35 +0,0 @@ -package woyou.aidlservice.jiuiv5; - -/** - * 打印服务执行结果的回调 - */ -interface ICallback { - - /** - * 返回接口执行的结果 - * 备注:此回调只表明接口执行是否成功但不表明打印机的工作结果,如需要获取打印机结果请用事务模式 - * @param isSuccess: true执行成功,false 执行失败 - */ - oneway void onRunResult(boolean isSuccess); - - /** - * 返回接口执行的结果(字符串数据) - * @param result: 结果,打印机上电以来打印长度等(单位mm) - */ - oneway void onReturnString(String result); - - /** - * 返回接口执行失败时发生异常情况的具体原因 - * code: 异常代码 - * msg: 异常描述 - */ - oneway void onRaiseException(int code, String msg); - - /** - * 返回打印机结果 - * code: 异常代码 0 成功 1 失败 - * msg: 异常描述 - */ - oneway void onPrintResult(int code, String msg); - -} \ No newline at end of file diff --git a/android/src/main/aidl/woyou/aidlservice/jiuiv5/ITax.aidl b/android/src/main/aidl/woyou/aidlservice/jiuiv5/ITax.aidl deleted file mode 100755 index e1f4667..0000000 --- a/android/src/main/aidl/woyou/aidlservice/jiuiv5/ITax.aidl +++ /dev/null @@ -1,10 +0,0 @@ -package woyou.aidlservice.jiuiv5; - -/** - * 打印服务执行结果的回调 - */ -interface ITax { - - oneway void onDataResult(in byte [] data); - -} \ No newline at end of file diff --git a/android/src/main/aidl/woyou/aidlservice/jiuiv5/IWoyouService.aidl b/android/src/main/aidl/woyou/aidlservice/jiuiv5/IWoyouService.aidl deleted file mode 100644 index ad5506e..0000000 --- a/android/src/main/aidl/woyou/aidlservice/jiuiv5/IWoyouService.aidl +++ /dev/null @@ -1,344 +0,0 @@ -//P、V系列 - -package woyou.aidlservice.jiuiv5; - -import woyou.aidlservice.jiuiv5.ICallback; -import woyou.aidlservice.jiuiv5.ITax; -import android.graphics.Bitmap; -import com.sunmi.trans.TransBean; - -interface IWoyouService -{ - /** - * 替换原打印机升级固件接口(void updateFirmware()) - * 现更改为负载包名的数据接口,仅系统调用 - * 支持版本:4.0.0以上 - */ - boolean postPrintData(String packageName, in byte[] data, int offset, int length); - - /** - * 打印机固件状态 - * 返回: 0--未知, A5--bootloader, C3--print - */ - int getFirmwareStatus(); - - /** - * 获取打印服务版本 - * 返回: WoyouService服务版本 - */ - String getServiceVersion(); - - /** - * 初始化打印机,重置打印机的逻辑程序,但不清空缓存区数据,因此 - * 未完成的打印作业将在重置后继续 - */ - void printerInit(in ICallback callback); - - /** - * 打印机自检,打印机会打印自检页 - */ - void printerSelfChecking(in ICallback callback); - - /** - * 获取打印机板序列号 - * 返回:打印机板的序列号 - */ - String getPrinterSerialNo(); - - /** - * 获取打印机固件版本号 - * 返回:打印机固件版本号 - */ - String getPrinterVersion(); - - /** - * 获取打印机型号 - * 返回:打印机型号 - */ - String getPrinterModal(); - - /** - * 获取打印机上电后的打印长度 - * callback onReturnString 中返回 - */ - void getPrintedLength(in ICallback callback); - - /** - * 打印机走纸(强制换行,结束之前的打印内容后走纸n行) - * n: 走纸行数 - */ - void lineWrap(int n, in ICallback callback); - - /** - * epson指令打印 - */ - void sendRAWData(in byte[] data, in ICallback callback); - - /** - * 设置对齐模式,对之后打印有影响,除非初始化 - * alignment: 对齐方式 0--居左 , 1--居中, 2--居右 - */ - void setAlignment(int alignment, in ICallback callback); - - /** - * 设置打印字体, 暂时仅能系统调用,外部调用无效 - */ - void setFontName(String typeface, in ICallback callback); - - /** - * 设置字体大小, 对之后打印有影响,除非初始化 - * 注意:字体大小是超出标准国际指令的打印方式, - * 调整字体大小会影响字符宽度,每行字符数量也会随之改变, - * 因此按等宽字体形成的排版可能会错乱 - * fontsize: 字体大小 - */ - void setFontSize(float fontsize, in ICallback callback); - - /** - * 打印文字,文字宽度满一行自动换行排版,不满一整行不打印除非强制换行 - * text: 要打印的文字字符串 - */ - void printText(String text, in ICallback callback); - - /** - * 打印指定字体的文本,字体设置只对本次有效 - * text: 要打印文字 - * typeface: 字体名称(暂时仅能系统调用,外部调用无效) - * fontsize: 字体大小 - */ - void printTextWithFont(String text, String typeface, float fontsize, in ICallback callback); - - /** - * 打印表格的一行,可以指定列宽、对齐方式 - * colsTextArr: 各列文本字符串数组 - * colsWidthArr: 各列宽度数组(以英文字符计算, 每个中文字符占两个英文字符, 每个宽度大于0) - * colsAlign: 各列对齐方式(0居左, 1居中, 2居右) - * 备注: 三个参数的数组长度应该一致, 如果colsText[i]的宽度大于colsWidth[i], 则文本换行 - */ - void printColumnsText(in String[] colsTextArr, in int[] colsWidthArr, in int[] colsAlign, in ICallback callback); - - /** - * 打印图片 - * bitmap: 最大宽度384像素,超出宽度将显示不全;图片大小长*宽<8M; - */ - void printBitmap(in Bitmap bitmap, in ICallback callback); - - /** - * 打印一维条码 - * data: 条码数据 - * symbology: 条码类型 - * 0 -- UPC-A, 要求12位数字(最后一位校验位必须正确),但受限于打印机的宽度及条码宽度 - * 1 -- UPC-E, 要求8位数字(最后一位校验位必须正确),但受限于打印机的宽度及条码宽度 - * 2 -- JAN13(EAN13), 要求13位数字(最后一位校验位必须正确),但受限于打印机的宽度及条码宽度 - * 3 -- JAN8(EAN8), 要求8位数字(最后一位校验位必须正确),但受限于打印机的宽度及条码宽度 - * 4 -- CODE39, 数字英文及8个特殊符号且首尾为*号,但受限于打印机的宽度及条码宽度 - * 5 -- ITF, 字符为数字且小于14位,但受限于打印机的宽度及条码宽度 - * 6 -- CODABAR, 起始和终止必须为A-D,数据为0-9及6个特殊字符,长度任意但受限于打印机的宽度及条码宽度 - * 7 -- CODE93, 字符任意,长度任意但受限于打印机的宽度及条码宽度 - * 8 -- CODE128 字符任意,长度任意但受限于打印机的宽度及条码宽度 - * height: 条码高度, 取值1到255, 默认162 - * width: 条码宽度, 取值2至6, 默认2 - * textposition: 文字位置 0--不打印文字, 1--文字在条码上方, 2--文字在条码下方, 3--条码上下方均打印 - */ - void printBarCode(String data, int symbology, int height, int width, int textposition, in ICallback callback); - - /** - * 打印二维条码 - * data: 二维码数据 - * modulesize: 二维码块大小(单位:点, 取值 1 至 16 ) - * errorlevel: 二维码纠错等级(0 至 3), - * 0 -- 纠错级别L ( 7%), - * 1 -- 纠错级别M (15%), - * 2 -- 纠错级别Q (25%), - * 3 -- 纠错级别H (30%) - */ - void printQRCode(String data, int modulesize, int errorlevel, in ICallback callback); - - /** - * 打印文字,文字宽度满一行自动换行排版,不满一整行不打印除非强制换行 - * 文字按矢量文字宽度原样输出,即每个字符不等宽 - * text: 要打印的文字字符串 - */ - void printOriginalText(String text, in ICallback callback); - - /** - * lib包打印专用接口 - * transbean:打印任务列表 - */ - void commitPrint(in TransBean[] transbean, in ICallback callback); - - /** - * 打印缓冲区内容 - */ - void commitPrinterBuffer(); - - /** - * 进入事务模式,所有打印调用将缓存; - * 调用commitPrinterBuffe()、exitPrinterBuffer(true)、commitPrinterBufferWithCallback()、 - * exitPrinterBufferWithCallback(true)后才进行打印; - * clean: 如果之前没退出事务模式,是否清除已缓存的缓冲区内容 - */ - void enterPrinterBuffer(in boolean clean); - - /** - * 退出缓冲模式 - * commit: 是否打印出缓冲区内容 - */ - void exitPrinterBuffer(in boolean commit); - - /** - * 发送数控指令 - * data:税控命令 - */ - void tax(in byte [] data,in ITax callback); - - /** - * 获取打印机头的型号 - * callback onReturnString 中返回 - */ - void getPrinterFactory(in ICallback callback); - - /** - * 清除打印机缓存数据(仅系统调用,外部调用无效) - */ - void clearBuffer(); - - /** - * 带反馈打印缓冲区内容 - */ - void commitPrinterBufferWithCallback(in ICallback callback); - - /** - * 带反馈退出缓冲打印模式 - * commit: 是否提交缓冲区内容 - */ - void exitPrinterBufferWithCallback(in boolean commit, in ICallback callback); - - /** - * 打印表格的一行,可以指定列宽、对齐方式 - * colsTextArr: 各列文本字符串数组 - * colsWidthArr: 各列宽度权重即各列所占比例 - * colsAlign: 各列对齐方式(0居左, 1居中, 2居右) - * 备注: 三个参数的数组长度应该一致, 如果colsText[i]的宽度大于colsWidth[i], 则文本换行 - */ - void printColumnsString(in String[] colsTextArr, in int[] colsWidthArr, in int[] colsAlign, in ICallback callback); - - /** - * 获取打印机的最新状态 - * 返回:打印机状态反馈 1正常 2准备中 3通信异常 4缺纸 5过热 505:无打印机 507:更新失败 - */ - int updatePrinterState(); - - /** - * 自定义打印图片 - * bitmap: 图片bitmap对象(最大宽度384像素,图片超过1M无法打印) - * type: 目前有两种打印方式:0、同printBitmap 1、阈值200的黑白化图片 2、灰度图片 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.1.6以上 - * V1s-v3.1.6以上 - * V2-v1.0.0以上 - */ - void printBitmapCustom(in Bitmap bitmap, in int type, in ICallback callback); - - /** - * 获取强制启用字体加倍状态 - * 返回 0:未启用 1:倍宽 2:倍高 3:倍高倍宽 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - int getForcedDouble(); - - /** - * 是否强制启用反白样式 - * 返回 true:启用 false:未启用 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - boolean isForcedAntiWhite(); - - /** - * 是否强制启用加粗样式 - * 返回 true:启用 false:未启用 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - boolean isForcedBold(); - - /** - * 是否强制启用下划线样式 - * 返回 true:启用 false:未启用 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - boolean isForcedUnderline(); - - /** - * 获取强制启用行高状态 - * 返回 -1:未启用 0~255:强制行高像素高度 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - int getForcedRowHeight(); - - /** - * 获取当前字体 - * 返回 0:商米字体1.0 1:商米字体2.0 - * 支持版本: P1-v3.2.0以上 - * P14g-v1.2.0以上 - * V1s-v3.2.0以上 - * V2-v1.0.0以上 - */ - int getFontName(); - - /** - * 获取当前打印浓度 - * 返回 -1:打印浓度不可用 非-1: 打印浓度值 % - * 支持版本: v4.1.0以上版本 - */ - int getPrinterDensity(); - - /** - * 打印二维条码 - * data: 条码内容 pdf417暂不支持中文 - * symbolgy: 条码类型 1:Qr Code 2:PDF417 - * modulesize: 块大小 - * errorlevle: 纠错等级 Qr code:0~3 - * PDF417: 0~8 - * 支持版本: v4.1.0以上 - */ - void print2DCode(String data, int symbology, int modulesize, int errorlevel, in ICallback callback); - - /** - * 台式打印机可以切换打印纸类型,此接口可以获取当前打印机支持的打印纸型号 - * 返回: 0: 80mm 1: 58mm - * 支持版本:T1-v2.4.0以上 - * T2、S2-v1.0.5以上 - * 其他 v4.1.2以上 - */ - int getPrinterPaper(); - - /** - * 打印结束自动出纸(打印头到纸舱盖间的距离),如果有切刀会自动切刀 - * 支持版本:4.1.5以上 - */ - void autoOutPaper(in ICallback callback); - - /** - * 设置打印样式接口 - * key 设置属性, 见WoyouConsts - * value 设置内容 - * 支持版本:v4.2.22以上 - */ - void setPrinterStyle(int key, int value); - -} \ No newline at end of file diff --git a/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterModule.java b/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterModule.java index 9b55237..9b6bbd8 100644 --- a/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterModule.java +++ b/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterModule.java @@ -3,7 +3,7 @@ import android.content.Context; import android.util.Log; -import com.tablemi.flutter_sunmi_printer.utils.AidlUtil; +import com.tablemi.flutter_sunmi_printer.utils.InnerPrinterUtil; import com.tablemi.flutter_sunmi_printer.utils.Base64Utils; import com.tablemi.flutter_sunmi_printer.utils.BitmapUtil; import com.tablemi.flutter_sunmi_printer.utils.ESCUtil; @@ -18,12 +18,12 @@ public class FlutterSunmiPrinterModule { public static int DEFAULT_FONT_SIZE = 24; public void initAidl(Context context) { - AidlUtil.getInstance().connectPrinterService(context); - AidlUtil.getInstance().initPrinter(); + InnerPrinterUtil.getInstance().connectPrinterService(context); + InnerPrinterUtil.getInstance().initPrinter(); } public void reset() { - AidlUtil.getInstance().initPrinter(); + InnerPrinterUtil.getInstance().initPrinter(); } public void startPrint() { @@ -39,27 +39,27 @@ public boolean isPrinting() { } public void boldOn() { - AidlUtil.getInstance().sendRawData(ESCUtil.boldOn()); + InnerPrinterUtil.getInstance().sendRawData(ESCUtil.boldOn()); } public void boldOff() { - AidlUtil.getInstance().sendRawData(ESCUtil.boldOff()); + InnerPrinterUtil.getInstance().sendRawData(ESCUtil.boldOff()); } public void underlineOn() { - AidlUtil.getInstance().sendRawData(ESCUtil.underlineWithOneDotWidthOn()); + InnerPrinterUtil.getInstance().sendRawData(ESCUtil.underlineWithOneDotWidthOn()); } public void underlineOff() { - AidlUtil.getInstance().sendRawData(ESCUtil.underlineOff()); + InnerPrinterUtil.getInstance().sendRawData(ESCUtil.underlineOff()); } public void emptyLines(int n) { - AidlUtil.getInstance().lineWrap(n); + InnerPrinterUtil.getInstance().lineWrap(n); } public void setFontSize(int size) { - AidlUtil.getInstance().setFontSize(size); + InnerPrinterUtil.getInstance().setFontSize(size); } public void text(String text, int align, boolean bold, boolean underline, int size, int linesAfter) { @@ -73,7 +73,7 @@ public void text(String text, int align, boolean bold, boolean underline, int si // Print text setFontSize(size); - AidlUtil.getInstance().printTableItem(new String[] { text }, new int[] { 32 }, new int[] { align }); + InnerPrinterUtil.getInstance().printTableItem(new String[] { text }, new int[] { 32 }, new int[] { align }); if (linesAfter > 0) { emptyLines(linesAfter); } @@ -115,7 +115,7 @@ public void row(String colsStr, boolean bold, boolean underline, int textSize, i // Print row setFontSize(textSize); - AidlUtil.getInstance().printTableItem(colsText, colsWidth, colsAlign); + InnerPrinterUtil.getInstance().printTableItem(colsText, colsWidth, colsAlign); if (linesAfter > 0) { emptyLines(linesAfter); } @@ -141,7 +141,11 @@ public void printImage(String base64, int align) { bytes[i] += 256; } } - AidlUtil.getInstance().printBitmap(BitmapUtil.convertToThumb(bytes, 280), align); + InnerPrinterUtil.getInstance().printBitmap(BitmapUtil.convertToThumb(bytes, 280), align); // AidlUtil.getInstance().lineWrap(1); } + + public void cutPaper() { + InnerPrinterUtil.getInstance().cutPaper(); + } } diff --git a/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterPlugin.java b/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterPlugin.java index fe147a5..849d878 100644 --- a/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterPlugin.java +++ b/android/src/main/java/com/tablemi/flutter_sunmi_printer/FlutterSunmiPrinterPlugin.java @@ -25,6 +25,7 @@ public class FlutterSunmiPrinterPlugin implements FlutterPlugin, MethodCallHandl private String PRINT_TEXT = "printText"; private String PRINT_ROW = "printRow"; private String PRINT_IMAGE = "printImage"; + private String CUT_PAPER = "cutPaper"; @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { @@ -102,6 +103,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { int align = call.argument("align"); flutterSunmiPrinterModule.printImage(base64, align); result.success(null); + } else if (call.method.equals(CUT_PAPER)) { + flutterSunmiPrinterModule.cutPaper(); } else { result.notImplemented(); } diff --git a/android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/AidlUtil.java b/android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/InnerPrinterUtil.java similarity index 84% rename from android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/AidlUtil.java rename to android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/InnerPrinterUtil.java index 9d5e013..edcaed4 100644 --- a/android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/AidlUtil.java +++ b/android/src/main/java/com/tablemi/flutter_sunmi_printer/utils/InnerPrinterUtil.java @@ -1,41 +1,36 @@ package com.tablemi.flutter_sunmi_printer.utils; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; -import android.os.IBinder; import android.os.RemoteException; import android.widget.Toast; import com.sunmi.pay.hardware.aidl.print.PrinterCallback; - +import com.sunmi.peripheral.printer.InnerPrinterCallback; +import com.sunmi.peripheral.printer.InnerPrinterException; +import com.sunmi.peripheral.printer.InnerPrinterManager; +import com.sunmi.peripheral.printer.InnerResultCallbcak; +import com.sunmi.peripheral.printer.SunmiPrinterService; import com.tablemi.flutter_sunmi_printer.entities.TableItem; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import woyou.aidlservice.jiuiv5.ICallback; -import woyou.aidlservice.jiuiv5.IWoyouService; - -public class AidlUtil { +public class InnerPrinterUtil { private static final String SERVICE_PACKAGE = "woyou.aidlservice.jiuiv5"; - private static final String SERVICE_ACTION = "woyou.aidlservice.jiuiv5.IWoyouService"; - private IWoyouService woyouService; - private static AidlUtil mAidlUtil = new AidlUtil(); - private static final int LINE_BYTE_SIZE = 32; + private SunmiPrinterService woyouService; + private static InnerPrinterUtil mInnerPrinterUtil = new InnerPrinterUtil(); private Context context; - private AidlUtil() { + private InnerPrinterUtil() { } - public static AidlUtil getInstance() { - return mAidlUtil; + public static InnerPrinterUtil getInstance() { + return mInnerPrinterUtil; } /** @@ -45,11 +40,12 @@ public static AidlUtil getInstance() { */ public void connectPrinterService(Context context) { this.context = context.getApplicationContext(); - Intent intent = new Intent(); - intent.setPackage(SERVICE_PACKAGE); - intent.setAction(SERVICE_ACTION); - context.getApplicationContext().startService(intent); - context.getApplicationContext().bindService(intent, connService, Context.BIND_AUTO_CREATE); + try { + boolean result = InnerPrinterManager.getInstance().bindService(this.context, + connService); + } catch (InnerPrinterException e) { + e.printStackTrace(); + } } /** @@ -59,7 +55,12 @@ public void connectPrinterService(Context context) { */ public void disconnectPrinterService(Context context) { if (woyouService != null) { - context.getApplicationContext().unbindService(connService); + try { + InnerPrinterManager.getInstance().unBindService(this.context, + connService); + } catch (InnerPrinterException e) { + e.printStackTrace(); + } woyouService = null; } } @@ -68,22 +69,20 @@ public boolean isConnect() { return woyouService != null; } - private ServiceConnection connService = new ServiceConnection() { - + InnerPrinterCallback connService = new InnerPrinterCallback(){ @Override - public void onServiceDisconnected(ComponentName name) { - woyouService = null; + protected void onConnected(SunmiPrinterService service){ + woyouService = service; } @Override - public void onServiceConnected(ComponentName name, IBinder service) { - woyouService = IWoyouService.Stub.asInterface(service); + protected void onDisconnected() { + woyouService = null; } }; - public ICallback generateCB(final PrinterCallback printerCallback) { - return new ICallback.Stub() { - + public InnerResultCallbcak generateCB(final PrinterCallback printerCallback) { + return new InnerResultCallbcak() { @Override public void onRunResult(boolean isSuccess) { @@ -349,7 +348,7 @@ public void sendRawData(byte[] data) { } } - public void sendRawDatabyBuffer(byte[] data, ICallback iCallback) { + public void sendRawDatabyBuffer(byte[] data, InnerResultCallbcak iCallback) { if (woyouService == null) { return; } @@ -362,4 +361,15 @@ public void sendRawDatabyBuffer(byte[] data, ICallback iCallback) { e.printStackTrace(); } } + + /** + * 切⼑(切纸) + */ + public void cutPaper() { + try { + woyouService.cutPaper(null); + } catch (RemoteException e) { + e.printStackTrace(); + } + } } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index a71b2ca..efce10e 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -34,7 +34,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.tablemi.flutter_sunmi_printer_example" - minSdkVersion 16 + minSdkVersion 19 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/example/lib/main.dart b/example/lib/main.dart index 67eda93..47f03d3 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -62,6 +62,9 @@ class _MyAppState extends State { SunmiPrinter.image(imgData); SunmiPrinter.emptyLines(3); + + // 切纸 + SunmiPrinter.cutPaper(); } @override diff --git a/example/pubspec.lock b/example/pubspec.lock new file mode 100644 index 0000000..e040221 --- /dev/null +++ b/example/pubspec.lock @@ -0,0 +1,161 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.5.0-nullsafety.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.1" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.3" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0-nullsafety.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_sunmi_printer: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.2.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.10-nullsafety.1" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0-nullsafety.3" + path: + dependency: transitive + description: + name: path + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0-nullsafety.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0-nullsafety.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.0-nullsafety.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.19-nullsafety.2" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0-nullsafety.3" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.3" +sdks: + dart: ">=2.10.0-110 <2.11.0" + flutter: ">=1.10.0" diff --git a/lib/src/sunmi_printer.dart b/lib/src/sunmi_printer.dart index a8df3fe..85b7ea7 100644 --- a/lib/src/sunmi_printer.dart +++ b/lib/src/sunmi_printer.dart @@ -26,6 +26,7 @@ class SunmiPrinter { static const String PRINT_TEXT = "printText"; static const String PRINT_ROW = "printRow"; static const String PRINT_IMAGE = "printImage"; + static const String CUT_PAPER = "cutPaper"; static const MethodChannel _channel = const MethodChannel('flutter_sunmi_printer'); @@ -131,4 +132,8 @@ class SunmiPrinter { "align": align.value, }); } + + static Future cutPaper() async { + await _channel.invokeMethod(CUT_PAPER); + } } diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..adb3261 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,147 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.5.0-nullsafety.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.1" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.3" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0-nullsafety.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.10-nullsafety.1" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0-nullsafety.3" + path: + dependency: transitive + description: + name: path + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0-nullsafety.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.0-nullsafety.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.0-nullsafety.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0-nullsafety.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0-nullsafety.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.19-nullsafety.2" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0-nullsafety.3" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0-nullsafety.3" +sdks: + dart: ">=2.10.0-110 <2.11.0" + flutter: ">=1.10.0"