From 8521954fa97bdfc54123afb4a72755ece311db06 Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期五, 21 三月 2025 14:45:45 +0800
Subject: [PATCH] feat(general): 更新登录逻辑和用户信息展示

---
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java |   74 ++++++++++++++++++++++++++++++++++---
 1 files changed, 68 insertions(+), 6 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 ef15209..525b5aa 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
@@ -47,6 +47,7 @@
      * @param userCard 鐢ㄦ埛鍗″唴瀹�
      * @param
      */
+    @Override
     public boolean writeUserData(BaseUserCardCard userCard) {
         if (userCard != null) {
             int a = 1;
@@ -113,7 +114,13 @@
      * @param b   涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
      * @param
      */
+    @Override
     public boolean writeData(byte[] str, int a, int b) {
+        return writeData(str, a, b, null);
+    }
+
+    @Override
+    public boolean writeData(byte[] str, int a, int b, NFCCallBack callBack) {
         Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
         if (str.length <= 16) {
             try {
@@ -126,35 +133,87 @@
                         int count = mfc.getSectorCount();
                         //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉�
                         if (a > count - 1 || a < 0) {
+                            if (callBack != null) {
+                                callBack.isSusses(false, "鎵囧尯閿欒--" + a);
+                            }
                             return false;
                         }
                         //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
                         int bCount = mfc.getBlockCountInSector(a);
                         //濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑�
                         if (b > bCount - 1 || b < 0) {
+                            if (callBack != null) {
+                                callBack.isSusses(false, "鍧楀尯閿欒--" + b);
+                            }
                             return false;
                         }
                         //楠岃瘉鎵囧尯瀵嗙爜
                         boolean isOpen = false;
-                        for (int i = 0; i < listKeyA.size(); i++) {
-                            if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) {
+                        if (listKeyA.size() != 0) {
+                            for (int i = 0; i < listKeyA.size(); i++) {
+                                if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) {
+                                    isOpen = true;
+                                    if (listKeyA.get(i).equals(defauleKey)) {
+                                        //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
+                                        changePasword(a, mfc);
+                                    }
+                                    break;
+                                }
+                            }
+                        } else if (listA_PS.size() != 0 && listA_PS.size() > a) {
+                            if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(a))) {
                                 isOpen = true;
-                                if (listKeyA.get(i).equals(defauleKey)) {
+                                if (listKeyA.get(a).equals(defauleKey)) {
                                     //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
                                     changePasword(a, mfc);
                                 }
-                                break;
                             }
                         }
+
+
                         if (isOpen) {
                             int bIndex = mfc.sectorToBlock(a);
                             //鍐欏崱
                             mfc.writeBlock(bIndex + b, str);
-                            return true;
+                            // 鏍¢獙鍐欏叆鏁版嵁鏄惁姝g‘
+                            boolean isVerified = true;
+                            // 璇诲彇鏁版嵁楠岃瘉
+                            byte[] readResult = mfc.readBlock(bIndex + b);
+                            if (readResult == null) {
+                                if (callBack != null) {
+                                    callBack.isSusses(false, a + "鎵囧尯鍐欏崱鏃跺啀娆¤鍙栭獙璇佹椂澶辫触");
+                                }
+                                return false;
+                            }
+                            for (int i = 0; i < str.length; i++) {
+                                if (str[i] != readResult[i]) {
+                                    isVerified = false;
+                                    break;
+                                }
+                            }
+                            if (isVerified) {
+                                if (callBack != null) {
+                                    callBack.isSusses(true, "鍐欏叆鎴愬姛骞堕獙璇侀�氳繃");
+                                }
+                                return true;
+
+                            } else {
+                                if (callBack != null) {
+                                    callBack.isSusses(false, "鍐欏叆楠岃瘉澶辫触");
+                                }
+                                return false;
+                            }
+                        }
+                        if (callBack != null) {
+                            callBack.isSusses(false, a + "鎵囧尯瀵嗙爜閿欒");
                         }
                         return false;
                     } catch (Exception e) {
                         e.printStackTrace();
+                        if (callBack != null) {
+                            callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage());
+
+                        }
                         return false;
                     } finally {
                         try {
@@ -179,12 +238,12 @@
      * @param a 涔﹀啓鐨勬墖鍖�
      *          //     * @param callback 杩斿洖鐩戝惉
      */
+    @Override
     public boolean changePasword(int a, MifareClassic mfc) {
 
         byte[] data = new byte[16];
         if (null != mfc) {
             try {
-
                 //灏嗗瘑鐮佽浆鎹负keyA
                 byte[] dataA = HexUtil.hexToByteArray(companyKeyA);
                 for (int i = 0; i < dataA.length; i++) {
@@ -218,6 +277,7 @@
      *
      * @return
      */
+    @Override
     public boolean initCard() {
         try {
             MifareClassic mfc = MifareClassic.get(tag);
@@ -278,4 +338,6 @@
         }
         return false;
     }
+
+
 }

--
Gitblit v1.8.0