From feb7add1979c830e0d940286242a7c489f2f8f96 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 27 九月 2024 09:23:34 +0800
Subject: [PATCH] 优化NFC模块架构,将一些方法抽调到父类中。

---
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java |  268 +++-------------------------------------------------
 1 files changed, 19 insertions(+), 249 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 5ce38e4..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,6 +8,7 @@
 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;
@@ -20,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);
     }
 
     /**
@@ -45,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;
-    }
-
 
     /**
      * 鍐欏崱
@@ -68,70 +54,10 @@
      * @param
      */
     public boolean writeUserData(UserCard userCard) {
-        if (userCard != null) {
-            int a = 1;
-            try {
-                MifareClassic mfc = MifareClassic.get(tag);
-                List<byte[]> list = new ArrayList<>();
-                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);
-                            }
-                            int bIndex = mfc.sectorToBlock(1);
-                            for (int j = 0; j < 3; j++) {
-                                //璇诲彇鏁版嵁
-                                byte[] data = null;
-                                try {
-                                    data = mfc.readBlock(bIndex);
-                                    bIndex++;
-                                    list.add(data);
-                                } catch (Exception e) {
-                                    e.printStackTrace();
-                                }
-                            }
-                            if (userCard.equlsUserCard(list)) {
-                                return true;
-                            }
-                            return false;
-                        }
-                        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;
     }
@@ -146,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;
     }
@@ -208,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;
     }
@@ -265,80 +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