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