From 8b566e47b67d74d1915bc9f2c07204dd1a222197 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期三, 04 六月 2025 13:44:00 +0800 Subject: [PATCH] feat(generallibrary): 添加按钮和对话框的背景 drawable --- baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 138 insertions(+), 14 deletions(-) diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java index 612e0b6..ba9a494 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java @@ -9,8 +9,10 @@ import com.dayu.baselibrary.bean.BaseUserCardCard; import com.dayu.baselibrary.tools.HexUtil; +import com.tencent.bugly.crashreport.CrashReport; import java.io.IOException; +import java.util.List; /** * author: zuo @@ -23,8 +25,6 @@ private static NativeNfcWriteHelper helper; - public NativeNfcWriteHelper(Intent intent, Activity activity) { - } public void setIntent(Intent intent) { this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); @@ -38,7 +38,7 @@ */ public static NativeNfcWriteHelper getInstence(Intent intent, Activity activity) { if (helper == null) { - helper = new NativeNfcWriteHelper(intent, activity); + helper = new NativeNfcWriteHelper(); } helper.setIntent(intent); return helper; @@ -125,6 +125,11 @@ @Override public boolean writeData(byte[] str, int a, int b, NFCCallBack callBack) { + return writeData(str, a, b, true, null); + } + + @Override + public boolean writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) { Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b); if (str.length == 16) { try { @@ -132,7 +137,9 @@ if (null != mfc) { try { //杩炴帴NFC - mfc.connect(); + if (isConnect) { + mfc.connect(); + } //鑾峰彇鎵囧尯鏁伴噺 int count = mfc.getSectorCount(); //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉� @@ -165,12 +172,11 @@ } } } else if (listA_PS.size() != 0 && listA_PS.size() > a) { - if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(a))) { + if (mfc.authenticateSectorWithKeyA(a, defauleKey)) { isOpen = true; - if (listKeyA.get(a).equals(defauleKey)) { - //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� - changePasword(a, mfc); - } + + } else if (mfc.authenticateSectorWithKeyA(a, listA_PS.get(a))) { + isOpen = true; } } if (isOpen) { @@ -227,11 +233,15 @@ } } catch (Exception e) { e.printStackTrace(); - callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage()); + if (callBack != null) { + callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage()); + } return false; } } else { - callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊锛宐yte鏁扮粍澶у皬涓嶄负16"); + if (callBack != null) { + callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊锛宐yte鏁扮粍澶у皬涓嶄负16"); + } } return false; } @@ -240,12 +250,120 @@ /** * 淇敼瀵嗙爜 * - * @param a 涔﹀啓鐨勬墖鍖� - * // * @param callback 杩斿洖鐩戝惉 + * @param 涔﹀啓鐨勬墖鍖� + * @param passWord 瀵嗙爜 + * @return + */ + public boolean changePasword( List<byte[]> passWord, boolean isConnect, boolean isClose, NFCCallBack callBack) { + if (passWord == null || passWord.size()!=16) { + if (callBack != null) { + callBack.isSusses(false, "瀵嗙爜鏁扮粍涓虹┖鎴栭暱搴︿笉涓�16"); + } + return false; + } + try { + MifareClassic mfc = MifareClassic.get(tag); + if (mfc == null) { + if (callBack != null) { + callBack.isSusses(false, "鑾峰彇MifareClassic瀹炰緥澶辫触"); + } + return false; + } + + try { + // 杩炴帴NFC + if (isConnect) { + mfc.connect(); + } + for (int i = 0; i < passWord.size(); i++) { + byte [] passWordItem = passWord.get(i); + // 楠岃瘉鎵囧尯瀵嗙爜 + boolean isAuthenticated = false; + + // 灏濊瘯浣跨敤榛樿瀵嗛挜楠岃瘉 + if (mfc.authenticateSectorWithKeyA(i, defauleKey)) { + isAuthenticated = true; + } else if (mfc.authenticateSectorWithKeyA(i, listA_PS.get(i))) { + continue; + } + if (!isAuthenticated) { + if (callBack != null) { + callBack.isSusses(false, "鎵囧尯" + i + "瀵嗙爜楠岃瘉澶辫触"); + } + return false; + } + + // 鍑嗗鏁版嵁 + byte[] data = new byte[16]; + + if (passWordItem.length == 16) { + // 濡傛灉鏄畬鏁寸殑16瀛楄妭鏁版嵁锛岀洿鎺ヤ娇鐢� + System.arraycopy(passWordItem, 0, data, 0, 16); + } else if (passWordItem.length == 6) { + // 濡傛灉鍙槸6瀛楄妭瀵嗛挜锛屾瀯寤哄畬鏁寸殑鎺у埗鍧� + // 灏嗗瘑鐮佽浆鎹负keyA + System.arraycopy(passWordItem, 0, data, 0, 6); + // 杈撳叆鎺у埗浣� + data[6] = (byte) 0xFF; + data[7] = (byte) 0x07; + data[8] = (byte) 0x80; + data[9] = (byte) 0x69; + // 灏嗗瘑鐮佷綔涓篕eyB + System.arraycopy(passWordItem, 0, data, 10, 6); + } else { + if (callBack != null) { + callBack.isSusses(false, "鎵囧尯" + i + "瀵嗙爜闀垮害涓嶆纭紝搴斾负6瀛楄妭鎴�16瀛楄妭"); + } + return false; + } + + // 鑾峰彇鍐欏叆浣嶇疆 + int bIndex = mfc.sectorToBlock(i); + int bCount = mfc.getBlockCountInSector(i); + + try { + // 鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡(鎺у埗鍧�) + mfc.writeBlock(bIndex + bCount - 1, data); + } catch (IOException e) { + if (callBack != null) { + callBack.isSusses(false, "鎵囧尯" + i + "鍐欏叆鎺у埗鍧楀け璐�: " + e.getMessage()); + } + return false; + } + } + + if (callBack != null) { + callBack.isSusses(true, "鎵�鏈夋墖鍖哄瘑鐮佷慨鏀规垚鍔�"); + } + return true; + } finally { + try { + if (isClose) { + mfc.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + CrashReport.postCatchedException(e); + if (callBack != null) { + callBack.isSusses(false, "淇敼瀵嗙爜鏃跺彂鐢熷紓甯�: " + e.getMessage()); + } + } + return false; + } + + /** + * 淇敼瀵嗙爜 + * + * @param a 鎵囧尯 + * @param mfc MifareClassic瀹炰緥 + * @return */ @Override public boolean changePasword(int a, MifareClassic mfc) { - byte[] data = new byte[16]; if (null != mfc) { try { @@ -268,15 +386,21 @@ int bCount = mfc.getBlockCountInSector(a); //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡 mfc.writeBlock(bIndex + bCount - 1, data); + return true; } catch (Exception e) { e.printStackTrace(); + CrashReport.postCatchedException(e); + return false; } } + return false; } + + /** * 鍒濆鍖栧崱 * -- Gitblit v1.8.0