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 |  202 +++++++------------------------------------------
 1 files changed, 31 insertions(+), 171 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 4abdceb..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,65 +88,27 @@
      *          //     * @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;
     }
 
     /**
-     * 杩斿洖鐩戝惉绫�
+     * 鍒濆鍖栧崱
+     *
+     * @return
      */
-    public interface NFCCallback {
-        /**
-         * 杩斿洖鏄惁鎴愬姛
-         *
-         * @param flag
-         */
-        void isSusses(boolean flag);
+    public boolean initCard() {
+        try {
+            return adapter.initCard();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
     }
+
+
 }

--
Gitblit v1.8.0