From ea8b02bbc2d20dc3db5b045fac4e6ddff7f44b7c Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期日, 29 九月 2024 10:30:10 +0800 Subject: [PATCH] 优化NFC模块架构,将一些方法抽调到父类中。修复一些bug --- qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java | 255 ++++---------------------------------------------- 1 files changed, 21 insertions(+), 234 deletions(-) diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java index 3517fcb..c766431 100644 --- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java +++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java @@ -8,9 +8,12 @@ import android.util.Log; import com.dayu.baselibrary.tools.HexUtil; +import com.dayu.baselibrary.tools.nfc.NfcWriteAdapter; import com.dayu.qiheonlinelibrary.card.UserCard; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * @author zx @@ -18,16 +21,16 @@ * email 1058083107@qq.com * description */ -public class NFCWriteHelper extends BaseNFCHelper { +public class NFCWriteHelper extends QHBaseNFCHelper { - private Tag tag; private static NFCWriteHelper helper; - private static int PASSWORD_LENTH = 12; + private NfcWriteAdapter adapter; + public NFCWriteHelper(Intent intent, Activity activity) { super(activity); - this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); + adapter = new NfcWriteAdapter(intent, activity); } /** @@ -43,21 +46,6 @@ return helper; } - /** - * 璁剧疆NFC鍗$殑璇诲彇瀵嗙爜 - * - * @param str - * @return - */ - public NFCWriteHelper setReadPassword(String str) { - if (null != str && (str.length() <= PASSWORD_LENTH)) { - for (int i = 0; i < str.length(); i++) { - defauleKey[i] = (byte) str.charAt(i); - } - } - return helper; - } - /** * 鍐欏崱 @@ -66,54 +54,10 @@ * @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; - } + try { + return adapter.writeUserData(userCard); + } catch (Exception e) { + e.printStackTrace(); } return false; } @@ -128,56 +72,10 @@ * @param */ public boolean writeData(byte[] str, int a, int b) { - Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b); - if (str.length <= 16) { - try { - MifareClassic mfc = MifareClassic.get(tag); - if (null != mfc) { - try { - //杩炴帴NFC - mfc.connect(); - //鑾峰彇鎵囧尯鏁伴噺 - int count = mfc.getSectorCount(); - //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉� - if (a > count - 1 || a < 0) { - return false; - } - //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� - int bCount = mfc.getBlockCountInSector(a); - //濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑� - if (b > bCount - 1 || b < 0) { - return false; - } - //楠岃瘉鎵囧尯瀵嗙爜 - boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); - if (!isOpen) { - isOpen = mfc.authenticateSectorWithKeyA(a, companyKey); - } else { - //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮� - changePasword(a, mfc); - } - if (isOpen) { - int bIndex = mfc.sectorToBlock(a); - //鍐欏崱 - mfc.writeBlock(bIndex + b, str); - 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; - } + try { + return adapter.writeData(str, a, b); + } catch (Exception e) { + e.printStackTrace(); } return false; } @@ -190,52 +88,10 @@ * // * @param callback 杩斿洖鐩戝惉 */ 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); -// 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 { + return adapter.changePasword(a, mfc); + } catch (Exception e) { + e.printStackTrace(); } return false; } @@ -247,81 +103,12 @@ */ public boolean initCard() { try { - MifareClassic mfc = MifareClassic.get(tag); - if (null != mfc) { - try { - //杩炴帴NFC - mfc.connect(); - //鑾峰彇鎵囧尯鏁伴噺 - int count = mfc.getSectorCount(); - byte[] data = new byte[16]; - String initData = "FFFFFFFFFFFFFF078069FFFFFFFFFFFF"; - byte[] initDataBytes = HexUtil.hexToByteArray(initData); - for (int sector = 0; sector < count; sector++) { - //楠岃瘉鎵囧尯瀵嗙爜 - boolean isOpen = mfc.authenticateSectorWithKeyA(sector, defauleKey); - if (!isOpen) { - isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey2); - if (isOpen){ - mfc.authenticateSectorWithKeyB(sector, companyKey2); - } - } - if (!isOpen) { - isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey); - if (isOpen){ - mfc.authenticateSectorWithKeyB(sector, companyKey); - } - } - if (isOpen) { - //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� - int blockCount = mfc.getBlockCountInSector(sector); - int blockIndex = mfc.sectorToBlock(sector); - for (int block = 0; block < blockCount ; block++) { - // 璺宠繃绗� 0 鎵囧尯鐨勭 0 鍧� - if (sector == 0 && block == 0) { - blockIndex++; - continue; - } - - if (block < 3) { - mfc.writeBlock(blockIndex, data); - } else { - mfc.writeBlock(blockIndex, initDataBytes); - } - //鍐欏崱 - - blockIndex++; - } - } - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } finally { - try { - mfc.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } + return adapter.initCard(); } catch (Exception e) { e.printStackTrace(); - return false; } return false; } - /** - * 杩斿洖鐩戝惉绫� - */ - public interface NFCCallback { - /** - * 杩斿洖鏄惁鎴愬姛 - * - * @param flag - */ - void isSusses(boolean flag); - } + } -- Gitblit v1.8.0