优化NFC模块架构,将一些方法抽调到父类中。修复一些bug
	
		
		1个文件已删除
	
		
		1 文件已重命名
	
		
		10个文件已修改
	
		
		6个文件已添加
	
	
 
	
	
	
	
	
	
	
	
|  |  |  | 
|---|
|  |  |  | runtimeOnly("androidx.room:room-common:2.3.0") | 
|---|
|  |  |  | annotationProcessor "androidx.room:room-compiler:2.3.0" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | implementation 'com.google.zxing:core:3.4.1' | 
|---|
|  |  |  | //    implementation 'com.google.zxing:core:3.4.1' | 
|---|
|  |  |  | implementation group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12' | 
|---|
|  |  |  | implementation 'com.wang.avi:library:2.1.3' | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | 
|---|
|  |  |  | context.startActivity(intent); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | dependencies { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') | 
|---|
|  |  |  | compileOnly fileTree(include: ['*.jar'], dir: 'exlibs') | 
|---|
|  |  |  | implementation 'com.android.support:appcompat-v7:28.0.0' | 
|---|
|  |  |  | implementation 'com.android.support.constraint:constraint-layout:1.1.3' | 
|---|
|  |  |  | implementation 'androidx.core:core-ktx:1.8.0' | 
|---|
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.Manifest; | 
|---|
|  |  |  | import android.app.Application; | 
|---|
|  |  |  | import android.os.Build; | 
|---|
|  |  |  | import android.util.Log; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.AidlUtil; | 
|---|
|  |  |  | import com.android.newpos.printer.PrinterManager; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.PrintAdater; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.ShangMiAidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ModelUtils; | 
|---|
|  |  |  | import com.pos.device.SDKManager; | 
|---|
|  |  |  | import com.pos.device.sys.SystemManager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //初始化打印相关服务 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void onCreat(Application context) { | 
|---|
|  |  |  | application = context; | 
|---|
|  |  |  | AidlUtil.getInstance().connectPrinterService(context); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //初始化打印相关服务 | 
|---|
|  |  |  | PrintAdater.getInstance().connectPrinterService(context); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | import android.nfc.NfcAdapter; | 
|---|
|  |  |  | import android.os.Bundle; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.nfc.NfcCommonData; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.nfc.HuaZhiNfcReadHepler; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ModelUtils; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.TipUtil; | 
|---|
|  |  |  | import com.pos.device.picc.PiccReader; | 
|---|
|  |  |  | import com.pos.device.picc.PiccReaderCallback; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | 
|---|
|  |  |  | public abstract class BaseNfcActivity extends BaseActivity { | 
|---|
|  |  |  | protected NfcAdapter mNfcAdapter; | 
|---|
|  |  |  | private PendingIntent mPendingIntent; | 
|---|
|  |  |  | public static int adapterType = NfcCommonData.defaultType; | 
|---|
|  |  |  | public static int adapterType = ModelUtils.defaultType; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | protected void onNewIntent(Intent intent) { | 
|---|
|  |  |  | super.onNewIntent(intent); | 
|---|
|  |  |  | switch (adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | onNfcBack(intent); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | protected void onCreate(Bundle savedInstanceState) { | 
|---|
|  |  |  | super.onCreate(savedInstanceState); | 
|---|
|  |  |  | //判断是哪个机型 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Class.forName("com.pos.device.config.DevConfig"); | 
|---|
|  |  |  | adapterType = NfcCommonData.HuaZhiRongHai; | 
|---|
|  |  |  | } catch (ClassNotFoundException e) { | 
|---|
|  |  |  | adapterType = NfcCommonData.defaultType; | 
|---|
|  |  |  | switch (ModelUtils.getModelType()) { | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | case ModelUtils.ShangMiType: | 
|---|
|  |  |  | adapterType = ModelUtils.defaultType; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case ModelUtils.HuaZhiRongHaiType: | 
|---|
|  |  |  | adapterType = ModelUtils.HuaZhiRongHaiType; | 
|---|
|  |  |  | PiccReader.getInstance().startSearchCard(HuaZhiNfcReadHepler.TIMEOUT, new PiccReaderCallback() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onSearchResult(int result, int cardType) { | 
|---|
|  |  |  | if (result == PiccReaderCallback.SUCCESS) { | 
|---|
|  |  |  | switch (cardType) { | 
|---|
|  |  |  | //以下为M1卡 | 
|---|
|  |  |  | case PiccReader.MIFARE_ONE_S50: | 
|---|
|  |  |  | case PiccReader.MIFARE_ONE_S70: | 
|---|
|  |  |  | onNfcBack(null); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | protected void onDestroy() { | 
|---|
|  |  |  | super.onDestroy(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检测工作,判断设备的NFC支持情况 | 
|---|
|  |  |  | * | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary.tools.nfc; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.app.Activity; | 
|---|
|  |  |  | import android.content.Intent; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.bean.BaseUserCardCard; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Collections; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | * Date: 2024-09-27 | 
|---|
|  |  |  | * Time: 14:23 | 
|---|
|  |  |  | * 备注: | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class HuaZhiNfcReadHepler extends BaseNfcReadHelper { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static String TAG = "HuaZhiNfcReadHepler"; | 
|---|
|  |  |  | static HuaZhiNfcReadHepler huaZhiNfcReadHepler; | 
|---|
|  |  |  | public static final int TIMEOUT = -1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static HuaZhiNfcReadHepler getInstance(Intent intent, Activity activity) { | 
|---|
|  |  |  | if (huaZhiNfcReadHepler != null) { | 
|---|
|  |  |  | huaZhiNfcReadHepler = new HuaZhiNfcReadHepler(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return huaZhiNfcReadHepler; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCradType() { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getAllData(NFCCallMapback callback) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getOneSectorData(NFCCallListback callback) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCardNumber() { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCradTypeAndCardNumber() { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getData(int a, int b, NFCCallByteback callback) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<byte[]> getOnesectorData() { | 
|---|
|  |  |  | return Collections.emptyList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public BaseUserCardCard getUserCardData(BaseUserCardCard userCardCard) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.activity.BaseNfcActivity; | 
|---|
|  |  |  | import com.dayu.baselibrary.bean.BaseUserCardCard; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ModelUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Collections; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public NfcReadAdapter(Intent intent, Activity activity) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | nativeNfcReadHelper = new NativeNfcReadHelper(intent, activity); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCradType() { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return nativeNfcReadHelper.getCradType(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getAllData(NFCCallMapback callback) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | nativeNfcReadHelper.getAllData(callback); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getOneSectorData(NFCCallListback callback) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | nativeNfcReadHelper.getOneSectorData(callback); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCardNumber() { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return nativeNfcReadHelper.getCardNumber(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public String getCradTypeAndCardNumber() { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return nativeNfcReadHelper.getCradTypeAndCardNumber(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void getData(int a, int b, NFCCallByteback callback) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | nativeNfcReadHelper.getData(a, b, callback); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<byte[]> getOnesectorData() { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return nativeNfcReadHelper.getOnesectorData(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public BaseUserCardCard getUserCardData(BaseUserCardCard userCardCard) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType) { | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return nativeNfcReadHelper.getUserCardData(userCardCard); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.activity.BaseNfcActivity; | 
|---|
|  |  |  | import com.dayu.baselibrary.bean.BaseUserCardCard; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ModelUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | 
|---|
|  |  |  | NativeNfcWriteHelper nativeNfcWriteHelper; | 
|---|
|  |  |  | public NfcWriteAdapter(Intent intent, Activity activity) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType){ | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | nativeNfcWriteHelper=new NativeNfcWriteHelper(intent,activity); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean writeUserData(BaseUserCardCard userCard) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType){ | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return  nativeNfcWriteHelper.writeUserData(userCard); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean writeData(byte[] str, int a, int b) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType){ | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return  nativeNfcWriteHelper.writeData(str,a,b); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean changePasword(int a, MifareClassic mfc) { | 
|---|
|  |  |  | switch (BaseNfcActivity.adapterType){ | 
|---|
|  |  |  | case NfcCommonData.defaultType: | 
|---|
|  |  |  | case ModelUtils.defaultType: | 
|---|
|  |  |  | return  nativeNfcWriteHelper.changePasword(a,mfc); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary.tools.print; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.app.Application; | 
|---|
|  |  |  | import android.util.Log; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.android.newpos.printer.PrinterListener; | 
|---|
|  |  |  | import com.android.newpos.printer.PrinterManager; | 
|---|
|  |  |  | import com.android.newpos.printer.bean.PrintAlignMent; | 
|---|
|  |  |  | import com.android.newpos.printer.bean.PrintFontSize; | 
|---|
|  |  |  | import com.android.newpos.printer.bean.PrintTextProperty; | 
|---|
|  |  |  | import com.pos.device.SDKManager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | * Date: 2024-09-27 | 
|---|
|  |  |  | * Time: 11:10 | 
|---|
|  |  |  | * 备注:华智融海公司打印相关 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class HuaZhiRongHaiPrint { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static HuaZhiRongHaiPrint huaZhiRongHaiPrint; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static HuaZhiRongHaiPrint getInstance() { | 
|---|
|  |  |  | if (huaZhiRongHaiPrint == null) { | 
|---|
|  |  |  | huaZhiRongHaiPrint = new HuaZhiRongHaiPrint(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return huaZhiRongHaiPrint; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void connectPrinterService(Application context) { | 
|---|
|  |  |  | SDKManager.init(context, () -> { | 
|---|
|  |  |  | Log.d("application", "初始化成功"); | 
|---|
|  |  |  | PrinterManager.getInstance().init(context.getApplicationContext()); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打印指定字体的文本,字体设置只对本次有效 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param content: 要打印文字 | 
|---|
|  |  |  | * @param isBold:  是否加粗 | 
|---|
|  |  |  | * @param size:    字体大小 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void printText(List<String> content, float size, boolean isBold, boolean isUnderLine) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (int i = 0; i < content.size(); i++) { | 
|---|
|  |  |  | PrinterManager.getInstance().addText(new PrintTextProperty(PrintFontSize.LARGE, PrintAlignMent.LEFT, true), content.get(i)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PrinterManager.getInstance().feedLine(3); | 
|---|
|  |  |  | PrinterManager.getInstance().startPrint(new PrinterListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onFinish() { | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onError(int i) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary.tools.print; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.app.Application; | 
|---|
|  |  |  | import android.content.Context; | 
|---|
|  |  |  | import android.util.Log; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.android.newpos.printer.PrinterManager; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ModelUtils; | 
|---|
|  |  |  | import com.pos.device.SDKManager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | * Date: 2024-09-27 | 
|---|
|  |  |  | * Time: 10:29 | 
|---|
|  |  |  | * 备注:打印相关的路由 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class PrintAdater { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static PrintAdater printAdater; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static PrintAdater getInstance() { | 
|---|
|  |  |  | if (printAdater == null) { | 
|---|
|  |  |  | printAdater = new PrintAdater(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return printAdater; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 连接服务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void connectPrinterService(Application context) { | 
|---|
|  |  |  | switch (ModelUtils.getModelType()) { | 
|---|
|  |  |  | case ModelUtils.ShangMiType: | 
|---|
|  |  |  | ShangMiAidlUtil.getInstance().connectPrinterService(context); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case ModelUtils.HuaZhiRongHaiType: | 
|---|
|  |  |  | HuaZhiRongHaiPrint.getInstance().connectPrinterService(context); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 断开服务 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param context context | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static void disconnectPrinterService(Context context) { | 
|---|
|  |  |  | switch (ModelUtils.getModelType()) { | 
|---|
|  |  |  | case ModelUtils.ShangMiType: | 
|---|
|  |  |  | ShangMiAidlUtil.getInstance().connectPrinterService(context); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打印指定字体的文本,字体设置只对本次有效 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param content: 要打印文字 | 
|---|
|  |  |  | * @param isBold:  是否加粗 | 
|---|
|  |  |  | * @param size:    字体大小 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static void printText(List<String> content, float size, boolean isBold, boolean isUnderLine) { | 
|---|
|  |  |  | switch (ModelUtils.getModelType()) { | 
|---|
|  |  |  | case ModelUtils.ShangMiType: | 
|---|
|  |  |  | ShangMiAidlUtil.getInstance().printText(content, size, isBold, isUnderLine); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case ModelUtils.HuaZhiRongHaiType: | 
|---|
|  |  |  | HuaZhiRongHaiPrint.getInstance().printText(content, size, isBold, isUnderLine); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
| File was renamed from baselibrary/src/main/java/com/dayu/baselibrary/utils/AidlUtil.java | 
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary.utils; | 
|---|
|  |  |  | package com.dayu.baselibrary.tools.print; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.content.ComponentName; | 
|---|
|  |  |  | import android.content.Context; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.R; | 
|---|
|  |  |  | import com.dayu.baselibrary.bean.TableItem; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.ESCUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.PrinterCallback; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | 
|---|
|  |  |  | import woyou.aidlservice.jiuiv5.ICallback; | 
|---|
|  |  |  | import woyou.aidlservice.jiuiv5.IWoyouService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class AidlUtil { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商米打印模块相关代码 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class ShangMiAidlUtil { | 
|---|
|  |  |  | 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 ShangMiAidlUtil mAidlUtil = new ShangMiAidlUtil(); | 
|---|
|  |  |  | private Context context; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private AidlUtil() { | 
|---|
|  |  |  | private ShangMiAidlUtil() { | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static AidlUtil getInstance() { | 
|---|
|  |  |  | public static ShangMiAidlUtil getInstance() { | 
|---|
|  |  |  | return mAidlUtil; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打印文字 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void printText(String content, float size, boolean isBold, boolean isUnderLine) { | 
|---|
|  |  |  | public void printText(List<String> content, float size, boolean isBold, boolean isUnderLine) { | 
|---|
|  |  |  | if (woyouService == null) { | 
|---|
|  |  |  | Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | woyouService.sendRAWData(ESCUtil.underlineOff(), null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | woyouService.printTextWithFont(content, null, size, null); | 
|---|
|  |  |  | woyouService.setFontSize(size, null); | 
|---|
|  |  |  | for (int i = 0; i < content.size(); i++) { | 
|---|
|  |  |  | woyouService.printText(content.get(i) + "\n", null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | woyouService.lineWrap(3, null); | 
|---|
|  |  |  | } catch (RemoteException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | *打印图片 | 
|---|
|  |  |  | *打印图片 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void printBitmap(Bitmap bitmap) { | 
|---|
|  |  |  | if (woyouService == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 空打三行! | 
|---|
|  |  |  | * 空打三行! | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void print3Line() { | 
|---|
|  |  |  | if (woyouService == null) { | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dayu.baselibrary.utils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * author: zuo | 
|---|
|  |  |  | * Date: 2024-09-27 | 
|---|
|  |  |  | * Time: 10:18 | 
|---|
|  |  |  | * 备注:机型相关公共方法 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class ModelUtils { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 默认的调用方式(安卓原生) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public final static int defaultType = 0; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 华智融海的SDK | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public final static int HuaZhiRongHaiType = 1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public final static int ShangMiType = 2; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断是哪个机型 | 
|---|
|  |  |  | public static int getModelType() { | 
|---|
|  |  |  | int type; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Class.forName("com.pos.device.config.DevConfig"); | 
|---|
|  |  |  | type = ModelUtils.HuaZhiRongHaiType; | 
|---|
|  |  |  | return type; | 
|---|
|  |  |  | } catch (ClassNotFoundException e) { | 
|---|
|  |  |  | type = ModelUtils.ShangMiType; | 
|---|
|  |  |  | return type; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | import android.view.View; | 
|---|
|  |  |  | import android.widget.Toast; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.activity.BaseNfcActivity; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.BcdUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.AidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.PrintAdater; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.ShangMiAidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.BaseCommon; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.CRC8; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.DateUtil; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.dayu.henanlibrary.view.ProgressDialog; | 
|---|
|  |  |  | import com.tencent.bugly.crashreport.CrashReport; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Arrays; | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Copyright (C), 2023, | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打印机相关信息 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void setPrinterData(RechargeBean rechargeBean) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | StringBuffer data = new StringBuffer(); | 
|---|
|  |  |  | List<String> data = new ArrayList<>(); | 
|---|
|  |  |  | if (rechargeBean != null) { | 
|---|
|  |  |  | data.append("*****************************" + "\n"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | data.append("设备序列号:").append(rechargeBean.getSerial()).append("\n"); | 
|---|
|  |  |  | data.append("用户名:").append(rechargeBean.getUserName()).append("\n"); | 
|---|
|  |  |  | //            data.append("户  号:" + rechargeBean.getUserNum() + "\n"); | 
|---|
|  |  |  | data.append("充值金额:").append(rechargeBean.getMorny()).append("元").append("\n"); | 
|---|
|  |  |  | data.append("卡内余额:").append(rechargeBean.getBalance()).append("元").append("\n"); | 
|---|
|  |  |  | data.append("日  期:").append(DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2)).append("\n\n"); | 
|---|
|  |  |  | data.append("*****************************"); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | data.add("设备序列号:" + rechargeBean.getSerial()); | 
|---|
|  |  |  | data.add("用户名:" + rechargeBean.getUserName()); | 
|---|
|  |  |  | data.add("充值金额:" + rechargeBean.getMorny() + "元"); | 
|---|
|  |  |  | data.add("卡内余额:" + rechargeBean.getBalance() + "元"); | 
|---|
|  |  |  | data.add("日  期:" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2)); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | float size = 26; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AidlUtil.getInstance().printText(data.toString(), size, true, false); | 
|---|
|  |  |  | AidlUtil.getInstance().print3Line(); | 
|---|
|  |  |  | PrintAdater.getInstance().printText(data, size, true, false); | 
|---|
|  |  |  | ShangMiAidlUtil.getInstance().print3Line(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | import android.view.View; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.HexUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.AidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.PrintAdater; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.BaseCommon; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.DateUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.MornyUtil; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.dayu.qihealonelibrary.utils.CardCommon; | 
|---|
|  |  |  | import com.tencent.bugly.crashreport.CrashReport; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Copyright (C), 2023, | 
|---|
|  |  |  | 
|---|
|  |  |  | * Date: 2023-11-08 21:19 | 
|---|
|  |  |  | * Description: nfc写卡界面 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class NFCWreatActivityQHAlone  extends QHAloneBaseNfcActivity { | 
|---|
|  |  |  | public class NFCWreatActivityQHAlone extends QHAloneBaseNfcActivity { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | RegisteredCard registeredCard; | 
|---|
|  |  |  | CleanUserCard cleanUserCard; | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void setPrinterData(RechargeBean rechargeBean) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | StringBuffer data = new StringBuffer(); | 
|---|
|  |  |  | List<String> data = new ArrayList<>(); | 
|---|
|  |  |  | if (rechargeBean != null) { | 
|---|
|  |  |  | data.append("*****************************" + "\n"); | 
|---|
|  |  |  | data.append("设备序列号:" + rechargeBean.getSerial() + "\n"); | 
|---|
|  |  |  | data.append("用户名:" + rechargeBean.getUserName() + "\n"); | 
|---|
|  |  |  | data.append("卡  号:" + rechargeBean.getCardNumber() + "\n"); | 
|---|
|  |  |  | data.append("充值金额:" + rechargeBean.getMorny() + " 元" + "\n"); | 
|---|
|  |  |  | data.append("卡内余额:" + rechargeBean.getBalance() + " 元" + "\n"); | 
|---|
|  |  |  | data.append("日  期:" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2) + "\n\n"); | 
|---|
|  |  |  | data.append("*****************************"); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | data.add("设备序列号:" + rechargeBean.getSerial()); | 
|---|
|  |  |  | data.add("用户名:" + rechargeBean.getUserName()); | 
|---|
|  |  |  | data.add("卡  号:" + rechargeBean.getCardNumber()); | 
|---|
|  |  |  | data.add("充值金额:" + rechargeBean.getMorny() + " 元"); | 
|---|
|  |  |  | data.add("卡内余额:" + rechargeBean.getBalance() + " 元"); | 
|---|
|  |  |  | data.add("日  期:" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2)); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | float size = 26; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AidlUtil.getInstance().printText(data.toString(), size, true, false); | 
|---|
|  |  |  | AidlUtil.getInstance().print3Line(); | 
|---|
|  |  |  | PrintAdater.getInstance().printText(data, size, true, false); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | package com.dayu.qiheonlinelibrary.utils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import android.text.TextUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.AidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.PrintAdater; | 
|---|
|  |  |  | import com.dayu.baselibrary.tools.print.ShangMiAidlUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.DateUtil; | 
|---|
|  |  |  | import com.dayu.baselibrary.utils.MornyUtil; | 
|---|
|  |  |  | import com.dayu.qiheonlinelibrary.dbBean.RechargeBean; | 
|---|
|  |  |  | import com.tencent.bugly.crashreport.CrashReport; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Created by Android Studio. | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static void printerData(RechargeBean rechargeBean) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | StringBuffer data = new StringBuffer(); | 
|---|
|  |  |  | List<String> data = new ArrayList<>(); | 
|---|
|  |  |  | if (rechargeBean != null) { | 
|---|
|  |  |  | data.append("*****************************" + "\n"); | 
|---|
|  |  |  | data.append("设备序列号:" + rechargeBean.getSerial() + "\n"); | 
|---|
|  |  |  | data.append("姓   名:" + rechargeBean.getUserName() + "\n"); | 
|---|
|  |  |  | data.append("卡   号:" + rechargeBean.getCardNumber() + "\n"); | 
|---|
|  |  |  | data.append("用户编号:" + rechargeBean.getUserCode() + "\n"); | 
|---|
|  |  |  | data.append("充值金额:" + rechargeBean.getMorny() + " 元" + "\n"); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | data.add("设备序列号:" + rechargeBean.getSerial()); | 
|---|
|  |  |  | data.add("姓   名:" + rechargeBean.getUserName()); | 
|---|
|  |  |  | data.add("卡   号:" + rechargeBean.getCardNumber()); | 
|---|
|  |  |  | data.add("用户编号:" + rechargeBean.getUserCode()); | 
|---|
|  |  |  | data.add("充值金额:" + rechargeBean.getMorny() + " 元"); | 
|---|
|  |  |  | if (MornyUtil.changeY2F(rechargeBean.getDeductionMorny()) > 0) { | 
|---|
|  |  |  | data.append("补扣金额:" + rechargeBean.getDeductionMorny() + " 元" + "\n"); | 
|---|
|  |  |  | data.add("补扣金额:" + rechargeBean.getDeductionMorny() + " 元"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | data.append("充值后卡内余额:" + rechargeBean.getBalance() + " 元" + "\n"); | 
|---|
|  |  |  | data.append("充值电量:" + rechargeBean.getRechargeElectric() + " 度" + "\n"); | 
|---|
|  |  |  | data.append("充值后卡内电量:" + rechargeBean.getSurplusElectic() + " 度" + "\n"); | 
|---|
|  |  |  | data.append("日   期:" + DateUtil.dateToStamp(rechargeBean.getRechargeDate(), DateUtil.type2) + "\n\n"); | 
|---|
|  |  |  | data.append("*****************************"); | 
|---|
|  |  |  | data.add("充值后卡内余额:" + rechargeBean.getBalance() + " 元"); | 
|---|
|  |  |  | data.add("充值电量:" + rechargeBean.getRechargeElectric() + " 度"); | 
|---|
|  |  |  | data.add("充值后卡内电量:" + rechargeBean.getSurplusElectic() + " 度"); | 
|---|
|  |  |  | data.add("日   期:" + DateUtil.dateToStamp(rechargeBean.getRechargeDate(), DateUtil.type2)); | 
|---|
|  |  |  | data.add("*****************************"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | float size = 26; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AidlUtil.getInstance().printText(data.toString(), size, true, false); | 
|---|
|  |  |  | //                AidlUtil.getInstance().print3Line(); | 
|---|
|  |  |  | PrintAdater.getInstance().printText(data, size, true, false); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|