From ebc06a3ae3a42bd6ac1359a59c55d5e6f1a0e2f0 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期二, 26 三月 2024 16:18:08 +0800 Subject: [PATCH] 优化通讯 写卡界面添加二次确认 优化用户写卡逻辑,提高写卡速度。 --- app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java | 134 ++++++++++++++++++++++++++++++++------------ 1 files changed, 98 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java index 16a3046..a1923c1 100644 --- a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java +++ b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java @@ -7,6 +7,8 @@ import android.nfc.tech.MifareClassic; import android.util.Log; +import com.dayu.recharge.card.UserCard; + import java.io.IOException; /** @@ -55,6 +57,67 @@ return helper; } + + /** + * 鍐欏崱 + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param + */ + public boolean writeUserData(UserCard userCard) { + if (userCard != null) { + int a = 1; + try { + MifareClassic mfc = MifareClassic.get(tag); + if (null != mfc) { + try { + //杩炴帴NFC + mfc.connect(); + //楠岃瘉鎵囧尯瀵嗙爜 + boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); + if (!isOpen) { + isOpen = mfc.authenticateSectorWithKeyA(a, companyKey); + } else { + //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮� + changePasword(a, mfc); + } + if (isOpen) { + for (int b = 0; b < 3; b++) { + byte[] data; + if (b == 0) { + data = userCard.getZeroBytes(); + } else if (b == 1) { + data = userCard.getOneBytes(); + } else { + data = userCard.getTwoBytes(); + } + int bIndex = mfc.sectorToBlock(a); + //鍐欏崱 + mfc.writeBlock(bIndex + b, data); + } + return true; + } + return false; + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + try { + mfc.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + return false; + } + + /** * 鍐欏崱 * @@ -65,8 +128,6 @@ */ public boolean writeData(byte[] str, int a, int b) { Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b); - //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮� - changePasword(a); if (str.length <= 16) { try { MifareClassic mfc = MifareClassic.get(tag); @@ -90,6 +151,9 @@ boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); if (!isOpen) { isOpen = mfc.authenticateSectorWithKeyA(a, companyKey); + } else { + //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮� + changePasword(a, mfc); } if (isOpen) { int bIndex = mfc.sectorToBlock(a); @@ -124,54 +188,52 @@ * @param a 涔﹀啓鐨勬墖鍖� * // * @param callback 杩斿洖鐩戝惉 */ - public boolean changePasword(int a) { - MifareClassic mfc = MifareClassic.get(tag); + public boolean changePasword(int a, MifareClassic mfc) { +// MifareClassic mfc = MifareClassic.get(tag); byte[] data = new byte[16]; if (null != mfc) { try { - mfc.connect(); - - int count = mfc.getSectorCount(); - boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); - - //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜 - if (isOpen) { - //灏嗗瘑鐮佽浆鎹负keyA - byte[] dataA = HexUtil.hexToByteArray(companyKeyA); - for (int i = 0; i < dataA.length; i++) { - data[i] = dataA[i]; - } - //杈撳叆鎺у埗浣� - data[6] = (byte) 0xFF; - data[7] = (byte) 0x07; - data[8] = (byte) 0x80; - data[9] = (byte) 0x69; - byte[] dataB = HexUtil.hexToByteArray(companyKeyB); - //灏嗗瘑鐮佽浆鎹负KeyB - for (int i = 0; i < dataB.length; i++) { - data[i + 10] = dataB[i]; - } - int bIndex = mfc.sectorToBlock(a); - int bCount = mfc.getBlockCountInSector(a); - //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡 - mfc.writeBlock(bIndex + bCount - 1, data); +// mfc.connect(); +// int count = mfc.getSectorCount(); +// boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); +// //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜 +// if (isOpen) { + //灏嗗瘑鐮佽浆鎹负keyA + byte[] dataA = HexUtil.hexToByteArray(companyKeyA); + for (int i = 0; i < dataA.length; i++) { + data[i] = dataA[i]; + } + //杈撳叆鎺у埗浣� + data[6] = (byte) 0xFF; + data[7] = (byte) 0x07; + data[8] = (byte) 0x80; + data[9] = (byte) 0x69; + byte[] dataB = HexUtil.hexToByteArray(companyKeyB); + //灏嗗瘑鐮佽浆鎹负KeyB + for (int i = 0; i < dataB.length; i++) { + data[i + 10] = dataB[i]; + } + int bIndex = mfc.sectorToBlock(a); + int bCount = mfc.getBlockCountInSector(a); + //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡 + mfc.writeBlock(bIndex + bCount - 1, data); // byte[] dataa = mfc.readBlock(bIndex + bCount - 1); // // 淇敼瀵嗙爜 A // mfc.writeBlock(mfc.sectorToBlock(a) + 3, dataA); // // 淇敼瀵嗙爜 B // mfc.writeBlock(mfc.sectorToBlock(a) + 7, dataB); - } +// } return true; } catch (Exception e) { e.printStackTrace(); return false; // callback.isSusses(false); } finally { - try { - mfc.close(); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// mfc.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } } } return false; -- Gitblit v1.8.0