From 1bc1acff2127d61b359800096ad5b904370d9176 Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期三, 26 三月 2025 09:25:47 +0800
Subject: [PATCH] refactor(nfc): 重构 NFC 读写助手类

---
 generallibrary/src/main/java/com/dayu/general/tool/GeBaseHelper.kt                   |   28 
 baselibrary/src/main/java/com/dayu/baselibrary/utils/ModelUtils.java                 |   12 
 baselibrary/src/main/java/com/dayu/baselibrary/activity/BaseNfcActivity.java         |   20 -
 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt           |  105 ++++
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java     |    8 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcReadHelper.java      |    4 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java        |    9 
 henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NFCWriteHelper.java           |    3 
 henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NfcReadHelper.java            |    4 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java    |   57 ++
 build.gradle                                                                         |    4 
 generallibrary/src/main/AndroidManifest.xml                                          |   21 +
 generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt         |   13 
 generallibrary/src/main/java/com/dayu/general/bean/card/BaseCard.kt                  |   44 +-
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcReadAdapter.java         |   17 
 qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NfcReadHelper.java    |    1 
 app/build.gradle                                                                     |    2 
 qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NFCWriteHelper.java   |    9 
 generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt                  |   14 
 generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt                 |   63 +++
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java |   11 
 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt        |  144 ++++++++
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java   |   15 
 /dev/null                                                                            |   70 ---
 generallibrary/src/main/res/layout/activity_manager_read.xml                         |   46 +
 generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt                  |   36 +-
 generallibrary/src/main/cpp/general-native-lib.cpp                                   |  305 ++++++++++++----
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java  |    1 
 28 files changed, 768 insertions(+), 298 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 0d96122..cd537e8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,7 @@
 android {
     signingConfigs {
         debug {
-            storeFile file('../dycz.jks')
+            storeFile file(myValue)
             storePassword 'dycz@2023'
             keyAlias 'dayu'
             keyPassword 'dycz@2023'
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/activity/BaseNfcActivity.java b/baselibrary/src/main/java/com/dayu/baselibrary/activity/BaseNfcActivity.java
index 028ffb5..65e2eed 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/activity/BaseNfcActivity.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/activity/BaseNfcActivity.java
@@ -6,11 +6,8 @@
 import android.nfc.NfcAdapter;
 import android.os.Bundle;
 
-import com.dayu.baselibrary.tools.nfc.HuaZhiNfcReadHepler;
 import com.dayu.baselibrary.utils.ModelUtils;
 import com.dayu.baselibrary.utils.TipUtil;
-import com.pos.device.picc.PiccReader;
-import com.pos.device.picc.PiccReaderCallback;
 
 /**
  * author: zuo
@@ -51,23 +48,6 @@
             case ModelUtils.defaultType:
             case ModelUtils.ShangMiType:
                 adapterType = ModelUtils.defaultType;
-                break;
-            case ModelUtils.HuaZhiRongHaiType:
-                adapterType = ModelUtils.HuaZhiRongHaiType;
-                PiccReader.getInstance().startSearchCard(HuaZhiNfcReadHepler.TIMEOUT, new PiccReaderCallback() {
-                    @Override
-                    public void onSearchResult(int result, int cardType) {
-                        if (result == PiccReaderCallback.SUCCESS) {
-                            switch (cardType) {
-                                //浠ヤ笅涓篗1鍗�
-                                case PiccReader.MIFARE_ONE_S50:
-                                case PiccReader.MIFARE_ONE_S70:
-                                    onNfcBack(null);
-                                    break;
-                            }
-                        }
-                    }
-                });
                 break;
         }
 
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcReadHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcReadHelper.java
index 933ff26..331512d 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcReadHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcReadHelper.java
@@ -1,5 +1,7 @@
 package com.dayu.baselibrary.tools.nfc;
 
+import android.content.Intent;
+
 import com.dayu.baselibrary.bean.BaseManagerToUserCard;
 import com.dayu.baselibrary.bean.BaseUserCardCard;
 
@@ -15,6 +17,8 @@
 public abstract class BaseNfcReadHelper extends BaseNFCHelper {
 
 
+    public abstract void setIntent(Intent intent);
+
     public abstract String getCradType();
 
     /**
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java
index 4c7d684..80b5db4 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java
@@ -1,5 +1,6 @@
 package com.dayu.baselibrary.tools.nfc;
 
+import android.content.Intent;
 import android.nfc.tech.MifareClassic;
 
 import com.dayu.baselibrary.bean.BaseUserCardCard;
@@ -11,13 +12,16 @@
  * 澶囨敞锛�
  */
 public abstract class BaseNfcWriteHelper extends BaseNFCHelper {
+
+    public abstract void setIntent(Intent intent);
+
     /**
      * 鍐欏崱
      *
      * @param userCard 鐢ㄦ埛鍗″唴瀹�
-     * @param
+     * @param sector   涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
      */
-    public abstract boolean writeUserData(BaseUserCardCard userCard);
+    public abstract boolean writeUserData(BaseUserCardCard userCard,int sector);
 
     /**
      * 鍐欏崱
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/HuaZhiNfcReadHepler.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/HuaZhiNfcReadHepler.java
deleted file mode 100644
index 47c3b33..0000000
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/HuaZhiNfcReadHepler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.dayu.baselibrary.tools.nfc;
-
-import android.app.Activity;
-import android.content.Intent;
-
-import com.dayu.baselibrary.bean.BaseUserCardCard;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * author: zuo
- * Date: 2024-09-27
- * Time: 14:23
- * 澶囨敞锛�
- */
-public class HuaZhiNfcReadHepler extends BaseNfcReadHelper {
-
-    static String TAG = "HuaZhiNfcReadHepler";
-    static HuaZhiNfcReadHepler huaZhiNfcReadHepler;
-    public static final int TIMEOUT = -1;
-
-
-    public static HuaZhiNfcReadHepler getInstance(Intent intent, Activity activity) {
-        if (huaZhiNfcReadHepler != null) {
-            huaZhiNfcReadHepler = new HuaZhiNfcReadHepler();
-        }
-        return huaZhiNfcReadHepler;
-    }
-
-    @Override
-    public String getCradType() {
-        return "";
-    }
-
-    @Override
-    public void getAllData(NFCCallMapback callback) {
-
-    }
-
-    @Override
-    public void getOneSectorData(NFCCallListback callback) {
-
-    }
-
-    @Override
-    public String getCardNumber() {
-        return "";
-    }
-
-    @Override
-    public String getCradTypeAndCardNumber() {
-        return "";
-    }
-
-    @Override
-    public void getData(int a, int b, NFCCallByteback callback) {
-
-    }
-
-    @Override
-    public List<byte[]> getOnesectorData() {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public BaseUserCardCard getUserCardData(BaseUserCardCard userCardCard) {
-        return null;
-    }
-}
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
index c7a5200..1080205 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
@@ -32,8 +32,14 @@
 
 
     public NativeNfcReadHelper(Intent intent, Activity activity) {
+    }
+
+
+    @Override
+    public void setIntent(Intent intent) {
         this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
     }
+
 
     /**
      * 鍗曚緥鍒濆鍖�
@@ -45,6 +51,7 @@
         if (helper == null) {
             helper = new NativeNfcReadHelper(intent, activity);
         }
+        helper.setIntent(intent);
         return helper;
     }
 
@@ -55,7 +62,7 @@
      */
     @Override
     public BaseUserCardCard getUserCardData(BaseUserCardCard userCardCard) {
-        if (userCardCard!=null){
+        if (userCardCard != null) {
             BaseUserCardCard userCard = null;
             Map<String, List<byte[]>> map = new HashMap<>();
             MifareClassic mfc = MifareClassic.get(tag);
@@ -117,6 +124,7 @@
         }
         return null;
     }
+
 
     @Override
     public String getCradType() {
@@ -386,15 +394,15 @@
                 mfc.connect();
                 //鑾峰彇褰撳墠鍗″彿
                 boolean isOpen = false;
-                if (!listKeyA.isEmpty()){
+                if (!listKeyA.isEmpty()) {
                     for (int i = 0; i < listKeyA.size(); i++) {
                         if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) {
                             isOpen = true;
                             break;
                         }
                     }
-                }else if (!listA_PS.isEmpty()){
-                    if (mfc.authenticateSectorWithKeyA(0,   listA_PS.get(0))){
+                } else if (!listA_PS.isEmpty()) {
+                    if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
                         isOpen = true;
                     }
                 }
@@ -424,6 +432,47 @@
         return "";
     }
 
+
+    public String getCardNumberNoClose() {
+        MifareClassic mfc = MifareClassic.get(tag);
+        if (null != mfc) {
+            try {
+                mfc.connect();
+                //鑾峰彇褰撳墠鍗″彿
+                boolean isOpen = false;
+                if (!listKeyA.isEmpty()) {
+                    for (int i = 0; i < listKeyA.size(); i++) {
+                        if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) {
+                            isOpen = true;
+                            break;
+                        }
+                    }
+                } else if (!listA_PS.isEmpty()) {
+                    if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
+                        isOpen = true;
+                    }
+                }
+
+                if (isOpen) {
+                    int bIndex = mfc.sectorToBlock(0);
+                    byte[] data = mfc.readBlock(bIndex + 0);
+                    if (data != null && data.length > 0) {
+                        String hex = HexUtil.bytesToHex(Arrays.copyOfRange(data, 0, 4));
+                        hex = HexUtil.spaceHex(hex);
+                        hex = HexUtil.HighLowHex(hex);
+                        Log.i("NFCWreatActivity", "hex===" + hex);
+                        return hex.toUpperCase();
+                    }
+                }
+
+            } catch (IOException e) {
+                Log.i("NFCWreatActivity", e.toString());
+                return BaseCommon.CARD_TYPE_ERROR1;
+            }
+        }
+        return "";
+    }
+
     /**
      * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�
      *
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 525b5aa..612e0b6 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
@@ -24,6 +24,9 @@
     private static NativeNfcWriteHelper helper;
 
     public NativeNfcWriteHelper(Intent intent, Activity activity) {
+    }
+
+    public void setIntent(Intent intent) {
         this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
     }
 
@@ -37,6 +40,7 @@
         if (helper == null) {
             helper = new NativeNfcWriteHelper(intent, activity);
         }
+        helper.setIntent(intent);
         return helper;
     }
 
@@ -48,9 +52,9 @@
      * @param
      */
     @Override
-    public boolean writeUserData(BaseUserCardCard userCard) {
+    public boolean writeUserData(BaseUserCardCard userCard, int sector) {
         if (userCard != null) {
-            int a = 1;
+            int a = sector;
             try {
                 MifareClassic mfc = MifareClassic.get(tag);
                 if (null != mfc) {
@@ -122,7 +126,7 @@
     @Override
     public boolean writeData(byte[] str, int a, int b, NFCCallBack callBack) {
         Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
-        if (str.length <= 16) {
+        if (str.length == 16) {
             try {
                 MifareClassic mfc = MifareClassic.get(tag);
                 if (null != mfc) {
@@ -169,8 +173,6 @@
                                 }
                             }
                         }
-
-
                         if (isOpen) {
                             int bIndex = mfc.sectorToBlock(a);
                             //鍐欏崱
@@ -225,8 +227,11 @@
                 }
             } catch (Exception e) {
                 e.printStackTrace();
+                callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage());
                 return false;
             }
+        } else {
+            callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊锛宐yte鏁扮粍澶у皬涓嶄负16");
         }
         return false;
     }
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcReadAdapter.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcReadAdapter.java
index f8d4288..ba423c5 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcReadAdapter.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcReadAdapter.java
@@ -19,6 +19,11 @@
 
     NativeNfcReadHelper nativeNfcReadHelper;
 
+    @Override
+    public void setIntent(Intent intent) {
+        nativeNfcReadHelper.setIntent(intent);
+    }
+
     public NfcReadAdapter(Intent intent, Activity activity) {
         switch (BaseNfcActivity.adapterType) {
             case ModelUtils.defaultType:
@@ -63,12 +68,20 @@
         switch (BaseNfcActivity.adapterType) {
             case ModelUtils.defaultType:
                 return nativeNfcReadHelper.getCardNumber();
-
-
         }
         return "";
     }
 
+
+    public String getCardNumberNoClose() {
+        switch (BaseNfcActivity.adapterType) {
+            case ModelUtils.defaultType:
+                return nativeNfcReadHelper.getCardNumberNoClose();
+        }
+        return "";
+    }
+
+
     @Override
     public String getCradTypeAndCardNumber() {
         switch (BaseNfcActivity.adapterType) {
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
index e8230c9..84d11e5 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
@@ -26,10 +26,15 @@
     }
 
     @Override
-    public boolean writeUserData(BaseUserCardCard userCard) {
+    public void setIntent(Intent intent) {
+        nativeNfcWriteHelper.setIntent(intent);
+    }
+
+    @Override
+    public boolean writeUserData(BaseUserCardCard userCard,int sector) {
         switch (BaseNfcActivity.adapterType) {
             case ModelUtils.defaultType:
-                return nativeNfcWriteHelper.writeUserData(userCard);
+                return nativeNfcWriteHelper.writeUserData(userCard, sector);
 
         }
         return false;
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/utils/ModelUtils.java b/baselibrary/src/main/java/com/dayu/baselibrary/utils/ModelUtils.java
index 64b0632..3eda767 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/utils/ModelUtils.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/utils/ModelUtils.java
@@ -22,13 +22,13 @@
     //鍒ゆ柇鏄摢涓満鍨�
     public static int getModelType() {
         int type;
-        try {
-            Class.forName("com.pos.device.config.DevConfig");
-            type = ModelUtils.HuaZhiRongHaiType;
-            return type;
-        } catch (ClassNotFoundException e) {
+//        try {
+//            Class.forName("com.pos.device.config.DevConfig");
+//            type = ModelUtils.HuaZhiRongHaiType;
+//            return type;
+//        } catch (ClassNotFoundException e) {
             type = ModelUtils.ShangMiType;
             return type;
-        }
+//        }
     }
 }
diff --git a/build.gradle b/build.gradle
index b590da7..e5d0e08 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,4 +8,8 @@
     id 'com.android.application' version '7.2.2' apply false
     id 'com.android.library' version '7.2.2' apply false
     id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
+}
+
+ext {
+    myValue = 'C:\\Users\\User\\StudioProjects\\charge\\dycz.jks'
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml
index 61b5501..99e8411 100644
--- a/generallibrary/src/main/AndroidManifest.xml
+++ b/generallibrary/src/main/AndroidManifest.xml
@@ -50,12 +50,27 @@
         <activity android:name="com.dayu.general.activity.NewCardActivity" />
         <activity android:name="com.dayu.general.activity.ManageListActivity" />
         <activity android:name="com.dayu.general.activity.SearchUserActivity"/>
-        <activity android:name="com.dayu.general.activity.NfcWreatActivity" />
+        <activity android:name="com.dayu.general.activity.NfcWreatActivity"
+            android:exported="false"
+            android:launchMode="singleTop"
+            >
+            <intent-filter>
+                <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
         <activity android:name=".activity.MainActivity"/>
         <activity
             android:name=".activity.ManagerReadActivity"
-            android:screenOrientation="portrait"
-            android:windowSoftInputMode="adjustResize"/>
+            android:exported="false"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
 
 
 
diff --git a/generallibrary/src/main/cpp/general-native-lib.cpp b/generallibrary/src/main/cpp/general-native-lib.cpp
index fad41ad..cf264e2 100644
--- a/generallibrary/src/main/cpp/general-native-lib.cpp
+++ b/generallibrary/src/main/cpp/general-native-lib.cpp
@@ -3,66 +3,134 @@
 #include <android/log.h>
 #include <string.h>
 #include <jni.h>
+#include <sstream>
+#include <iomanip>
 
-static jclass contextClass;
-static jclass signatureClass;
-static jclass packageNameClass;
-static jclass packageInfoClass;
+// 澹版槑鍏ㄥ眬闈欐�佸彉閲忥紝鐢ㄤ簬瀛樺偍Java绫荤殑寮曠敤
+static jclass contextClass;      // Android Context绫荤殑寮曠敤
+static jclass signatureClass;    // Android Signature绫荤殑寮曠敤
+static jclass packageNameClass;  // Android PackageManager绫荤殑寮曠敤
+static jclass packageInfoClass;  // Android PackageInfo绫荤殑寮曠敤
 
+// 瀹氫箟鍙戝竷鐗堟湰鐨勭鍚嶅父閲�
 const char *RELEASE_SIGN = "308202b8308201a0020101300d06092a864886f70d01010b05003022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a5301e170d3233313132303035333131325a170d3438313131333035333131325a3022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a530820122300d06092a864886f70d01010105000382010f003082010a0282010100a0924f3d618e4a622def691e16e54ce5bdfd035bd73e7cb947d2bf3bd0c00afa26e52963e0299fc06d76d153be696c5285d630577e1dcb2b740a72b6d904482217de308fb91c8435441ed05e844ced1e5c3446d82cb8f38751049df26a42adcfc33f1f12c2ce03f676e5d148aad800ace89670b87835e2c02a8570a0b6740d9c0669d4cb3c597d0b2dd49fc0904e885773b6d3a87d9f1e73eb526e0d1a9e9e3c48d986938286cd824151b5a6214faf89d3e699524511b23c86d3b110a7f0bb56a6d2436f69816538a62a38cb1fee6eb685d267cc200df8af51b936bd280beaa2023f75678d77a11ac6de734b30af63d394c8b63bccf2115a47ea15c9212c740d0203010001300d06092a864886f70d01010b05000382010100307cafa9b14be91ba6424cfcc6aed75b069a1c4d6eb646eab0de93f372f236f5f0a6097499df99391075d6ced18d419a2b15adb041890e2b56a3bfbd6be40efee99c5c713ba8ea1d45da09b67916106116e96eb735271c4d53e0739f753145cbc42e149ad3d9507d422ec1c6f1a7f792a4542f9a64f0de3d4f4af69f0fb3390ef3577dcf8844cf744426d173b0934d879148062c5ca64022dc99af370dbfeaf2b5d4a279b20c54a361bca12c25bf185c2885519bbbc36e46ddb083080f0cc5b1f2eafe964ebce5071b0ae7d92a34a9193861b996d2c0299b1993f41063a27038199365a6e3cb27a02ffa9facdc48a63713eb5fbf90e9fd73056aba16b28e5fee";
 
+// 瀹氫箟XOR鍔犲瘑瀵嗛挜鏁扮粍
+const unsigned char XOR_KEY[] = {0x7A, 0xB3, 0xC9, 0x7B, 0xE3, 0x78};  // 淇敼鍚庝笁涓瓧鑺傜殑瀵嗛挜
 
-// 鍔犲瘑瀵嗛挜
-const unsigned char XOR_KEY[] = {0x7A, 0xB3, 0xC9, 0xD5, 0xE1, 0xF8, 0x42, 0x91, 0x37, 0x8F, 0x5D,
-                                 0x2E};
+// 瀹氫箟鍚庡崐閮ㄥ垎XOR瀵嗛挜鏁扮粍
+const unsigned char XOR_KEY_BACK[] = {0x4D, 0xE4, 0x7C, 0x2A, 0x8B, 0x7F};
 
-// 鍔犲瘑鍚庣殑M1鍗″瘑鐮佹暟缁�
+// 瀹氫箟鍔犲瘑鍚庣殑M1鍗℃墖鍖哄瘑閽ユ暟缁�
 const unsigned char ENCRYPTED_SECTOR_KEYS[] = {
-        // 鎵囧尯0瀵嗙爜 (鍔犲瘑鍚�)
-        0x9C, 0x45, 0x36, 0x55, 0x8C, 0x7F, 0x35, 0x93, 0x4B, 0x78, 0x2A, 0x79,
-        // 鎵囧尯1瀵嗙爜 (鍔犲瘑鍚�)
-        0xB4, 0x52, 0x91, 0x45, 0x99, 0x87, 0x3C, 0xA3, 0x6E, 0x5F, 0x1D, 0x5E,
-        // 浠ヤ笅绫讳技鏍煎紡瀛樺偍鍏朵粬鎵囧尯瀵嗙爜...
-        0x1E, 0x85, 0xEB, 0x51, 0xB9, 0x39, 0x02, 0x2E, 0x77, 0x1F, 0x3E, 0x93,
-        0x22, 0x62, 0xBD, 0x83, 0x99, 0x2A, 0x2F, 0x19, 0x95, 0x07, 0x29, 0x2E,
-        0x90, 0x18, 0xE0, 0x6A, 0xB7, 0x68, 0x34, 0x89, 0x42, 0x5B, 0x16, 0x47,
-        0xA8, 0x0B, 0xB5, 0x97, 0xB4, 0x43, 0x1D, 0x62, 0x89, 0x73, 0x33, 0x2E,
-        0x24, 0x9D, 0xB7, 0x46, 0x8D, 0x64, 0x49, 0x7A, 0x52, 0x41, 0x1C, 0x91,
-        0x31, 0x78, 0x95, 0x52, 0x95, 0x39, 0x19, 0x4C, 0x81, 0x2A, 0x0D, 0x47,
-        0xF5, 0x64, 0xA7, 0x93, 0xB9, 0x51, 0x27, 0x82, 0x43, 0x68, 0x31, 0x3F,
-        0x55, 0x93, 0xB7, 0x68, 0x97, 0x9A, 0x37, 0x71, 0x52, 0x49, 0x17, 0x1E,
-        0x8E, 0x93, 0xB5, 0x44, 0x8D, 0x42, 0x22, 0x84, 0x95, 0x33, 0x22, 0x93,
-        0x42, 0x82, 0xA3, 0x35, 0x91, 0x33, 0x13, 0x93, 0x71, 0x21, 0x01, 0x71,
-        0x37, 0x9F, 0xA6, 0x68, 0x92, 0x86, 0x46, 0x72, 0x43, 0x62, 0x12, 0x52,
-        0x5D, 0x85, 0x93, 0x86, 0x82, 0x46, 0x31, 0x86, 0x57, 0x48, 0x16, 0x88,
-        0x97, 0x73, 0xB5, 0x47, 0x95, 0x55, 0x36, 0x69, 0x49, 0x58, 0x18, 0x6A,
-        0xEA, 0x46, 0x84, 0x93, 0x82, 0x19, 0x29, 0x91, 0x31, 0x1C, 0x0C, 0x7D
+    // 鎵囧尯0瀵嗙爜 (鍔犲瘑鍚�)
+    0x9C, 0x45, 0x36, 0x55, 0x8C, 0x7F, 0x35, 0x93, 0x4B, 0x78, 0x2A, 0x79,
+    // 鎵囧尯1瀵嗙爜 (鍔犲瘑鍚�)
+    0xB4, 0x52, 0x91, 0x45, 0x99, 0x87, 0x3C, 0xA3, 0x6E, 0x5F, 0x1D, 0x5E,
+    // 浠ヤ笅绫讳技鏍煎紡瀛樺偍鍏朵粬鎵囧尯瀵嗙爜...
+    0x1E, 0x85, 0xEB, 0x51, 0xB9, 0x39, 0x02, 0x2E, 0x77, 0x1F, 0x3E, 0x93,
+    0x22, 0x62, 0xBD, 0x83, 0x99, 0x2A, 0x2F, 0x19, 0x95, 0x07, 0x29, 0x2E,
+    0x90, 0x18, 0xE0, 0x6A, 0xB7, 0x68, 0x34, 0x89, 0x42, 0x5B, 0x16, 0x47,
+    0xA8, 0x0B, 0xB5, 0x97, 0xB4, 0x43, 0x1D, 0x62, 0x89, 0x73, 0x33, 0x2E,
+    0x24, 0x9D, 0xB7, 0x46, 0x8D, 0x64, 0x49, 0x7A, 0x52, 0x41, 0x1C, 0x91,
+    0x31, 0x78, 0x95, 0x52, 0x95, 0x39, 0x19, 0x4C, 0x81, 0x2A, 0x0D, 0x47,
+    0xF5, 0x64, 0xA7, 0x93, 0xB9, 0x51, 0x27, 0x82, 0x43, 0x68, 0x31, 0x3F,
+    0x55, 0x93, 0xB7, 0x68, 0x97, 0x9A, 0x37, 0x71, 0x52, 0x49, 0x17, 0x1E,
+    0x8E, 0x93, 0xB5, 0x44, 0x8D, 0x42, 0x22, 0x84, 0x95, 0x33, 0x22, 0x93,
+    0x42, 0x82, 0xA3, 0x35, 0x91, 0x33, 0x13, 0x93, 0x71, 0x21, 0x01, 0x71,
+    0x37, 0x9F, 0xA6, 0x68, 0x92, 0x86, 0x46, 0x72, 0x43, 0x62, 0x12, 0x52,
+    0x5D, 0x85, 0x93, 0x86, 0x82, 0x46, 0x31, 0x86, 0x57, 0x48, 0x16, 0x88,
+    0x97, 0x73, 0xB5, 0x47, 0x95, 0x55, 0x36, 0x69, 0x49, 0x58, 0x18, 0x6A,
+    0xEA, 0x46, 0x84, 0x93, 0x82, 0x19, 0x29, 0x91, 0x31, 0x1C, 0x0C, 0x7D
 };
 
-// 瑙e瘑鍑芥暟
-void decrypt_key(const unsigned char *encrypted, char *decrypted, size_t len) {
+// 灏嗗瓧鑺傛暟缁勮浆鎹负鍗佸叚杩涘埗瀛楃涓茬殑鍑芥暟
+std::string bytesToHexString(const unsigned char* data, size_t len) {
+    std::stringstream ss;  // 鍒涘缓瀛楃涓叉祦瀵硅薄
+    ss << std::hex << std::uppercase << std::setfill('0');  // 璁剧疆杈撳嚭鏍煎紡涓哄崄鍏繘鍒讹紝澶у啓锛屼笉瓒充袱浣嶈ˉ0
     for (size_t i = 0; i < len; i++) {
-        decrypted[i] = encrypted[i] ^ XOR_KEY[i % sizeof(XOR_KEY)];
+        ss << std::setw(2) << static_cast<int>(data[i]);  // 灏嗘瘡涓瓧鑺傝浆鎹负涓や綅鍗佸叚杩涘埗
     }
-    decrypted[len] = '\0';
+    return ss.str();  // 杩斿洖杞崲鍚庣殑瀛楃涓�
 }
 
-//extern "C" JNIEXPORT jstring
-//
-//JNICALL
-//Java_com_yglx_testjni_MainActivity_getKey(
-//        JNIEnv *env,
-//        jobject /* this */) {
-//    return env->NewStringUTF(AUTH_KEY);
-//}
+// 瑙e瘑鍑芥暟锛氫娇鐢╔OR瀵嗛挜瑙e瘑鏁版嵁
+jstring decrypt_key(JNIEnv* env, const unsigned char* encrypted_data, int length) {
+    if (!encrypted_data || length < 6) {
+        __android_log_print(ANDROID_LOG_ERROR, "GeBaseHelper", "Invalid input data");
+        return nullptr;
+    }
 
+    // 涓轰笉鍚屾墖鍖轰娇鐢ㄤ笉鍚岀殑XOR瀵嗛挜
+    const unsigned char XOR_KEYS[16][6] = {
+        {0x7A, 0xB3, 0xC9, 0x72, 0xFC, 0x78},  // 鎵囧尯0
+        {0x7A, 0xB3, 0xC9, 0x5A, 0x05, 0xB7},  // 鎵囧尯1
+        {0x7A, 0xB3, 0x63, 0x10, 0xF9, 0xA4},  // 鎵囧尯2
+        {0x7A, 0x73, 0x35, 0xD1, 0xFE, 0x71},  // 鎵囧尯3 - 淇敼绗�3涓瓧鑺�
+        {0x2A, 0x93, 0xF8, 0x13, 0xB1, 0x31},  // 鎵囧尯4
+        {0x7A, 0xB3, 0x79, 0x6D, 0x40, 0x18},  // 鎵囧尯5
+        {0x7A, 0xB1, 0x19, 0xDA, 0xD6, 0x9A},  // 鎵囧尯6
+        {0x7A, 0x13, 0xDD, 0x63, 0x3E, 0x63},  // 鎵囧尯7
+        {0x7A, 0x73, 0x71, 0x5D, 0x89, 0x11},  // 鎵囧尯8
+        {0x7A, 0x73, 0xF1, 0xE2, 0xFF, 0xB1},  // 鎵囧尯9
+        {0x7A, 0x6D, 0xE9, 0x42, 0xBE, 0xA0},  // 鎵囧尯10
+        {0x7A, 0x43, 0xB1, 0x78, 0x76, 0x3D},  // 鎵囧尯11
+        {0x79, 0x43, 0xD1, 0xD1, 0x70, 0xEB},  // 鎵囧尯12
+        {0x7A, 0xB3, 0xBF, 0x49, 0x6B, 0xB1},  // 鎵囧尯13
+        {0x2B, 0xA3, 0xB3, 0x00, 0x19, 0x2C},  // 鎵囧尯14
+        {0x7A, 0xF3, 0xDA, 0x8B, 0x98, 0x15}   // 鎵囧尯15
+    };
+
+    // 鑾峰彇褰撳墠鎵囧尯鍙�
+    int sector = -1;
+    for (int i = 0; i < 16; i++) {
+        if (memcmp(encrypted_data, &ENCRYPTED_SECTOR_KEYS[i * 12], 6) == 0) {
+            sector = i;
+            break;
+        }
+    }
+
+    if (sector == -1) {
+        __android_log_print(ANDROID_LOG_ERROR, "GeBaseHelper", "Unknown sector");
+        return nullptr;
+    }
+
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
+//                       encrypted_data[0], encrypted_data[1], encrypted_data[2],
+//                       encrypted_data[3], encrypted_data[4], encrypted_data[5]);
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
+//                       XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
+//                       XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
+
+    unsigned char decrypted[6];
+    for (int i = 0; i < 6; i++) {
+        decrypted[i] = encrypted_data[i] ^ XOR_KEYS[sector][i];
+//        __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
+//                          i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
+    }
+
+    std::string result;
+    result.reserve(13);  // 6 bytes * 2 chars + null terminator
+    char hex[3];
+    for (int i = 0; i < 6; i++) {
+        snprintf(hex, sizeof(hex), "%02X", decrypted[i]);
+        result += hex;
+    }
+
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
+    return env->NewStringUTF(result.c_str());
+}
+
+// JNI搴撳姞杞芥椂鐨勫垵濮嬪寲鍑芥暟
 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
-
-    JNIEnv *env = NULL;
-    jint result = -1;
+    JNIEnv *env = NULL;  // 澹版槑JNI鐜鎸囬拡
+    jint result = -1;    // 鍒濆鍖栬繑鍥炲�间负閿欒鐘舵��
+    // 鑾峰彇JNI鐜
     if (vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK)
         return result;
 
+    // 鑾峰彇骞朵繚瀛楯ava绫荤殑鍏ㄥ眬寮曠敤
     contextClass = (jclass) env->NewGlobalRef((env)->FindClass("android/content/Context"));
     signatureClass = (jclass) env->NewGlobalRef((env)->FindClass("android/content/pm/Signature"));
     packageNameClass = (jclass) env->NewGlobalRef(
@@ -70,65 +138,144 @@
     packageInfoClass = (jclass) env->NewGlobalRef(
             (env)->FindClass("android/content/pm/PackageInfo"));
 
-    __android_log_print(ANDROID_LOG_DEBUG, "jw", "sss");
-    return JNI_VERSION_1_4;
+    __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "JNI_OnLoad completed");  // 杈撳嚭鍒濆鍖栧畬鎴愭棩蹇�
+    return JNI_VERSION_1_4;  // 杩斿洖JNI鐗堟湰
 }
 
-
+// 鑾峰彇M1鍗℃墖鍖哄瘑閽ョ殑JNI鍑芥暟
 extern "C"
 JNIEXPORT jstring JNICALL
 Java_com_dayu_general_tool_GeBaseHelper_getM1SectorKeySecure(JNIEnv *env, jobject instance,
                                                              jobject contextObject,
                                                              jint sectorIndex) {
+    // 鍙傛暟鏈夋晥鎬ф鏌�
+    if (!contextObject || !env) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Invalid parameters");
+        return env->NewStringUTF("");
+    }
+
     // 鑾峰彇鍖呯鐞嗗櫒鐩稿叧鏂规硶ID
-    jmethodID getPackageManagerId = (env)->GetMethodID(contextClass, "getPackageManager",
-                                                       "()Landroid/content/pm/PackageManager;");
-    jmethodID getPackageNameId = (env)->GetMethodID(contextClass, "getPackageName",
-                                                    "()Ljava/lang/String;");
-    jmethodID signToStringId = (env)->GetMethodID(signatureClass, "toCharsString",
-                                                  "()Ljava/lang/String;");
-    jmethodID getPackageInfoId = (env)->GetMethodID(packageNameClass, "getPackageInfo",
-                                                    "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
+    jmethodID getPackageManagerId = env->GetMethodID(contextClass, "getPackageManager",
+                                                   "()Landroid/content/pm/PackageManager;");
+    jmethodID getPackageNameId = env->GetMethodID(contextClass, "getPackageName",
+                                                "()Ljava/lang/String;");
+    jmethodID signToStringId = env->GetMethodID(signatureClass, "toCharsString",
+                                              "()Ljava/lang/String;");
+    jmethodID getPackageInfoId = env->GetMethodID(packageNameClass, "getPackageInfo",
+                                                "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
+
+    // 妫�鏌ユ柟娉旾D鑾峰彇鏄惁鎴愬姛
+    if (!getPackageManagerId || !getPackageNameId || !signToStringId || !getPackageInfoId) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get method IDs");
+        return env->NewStringUTF("");
+    }
 
     // 鑾峰彇搴旂敤绛惧悕淇℃伅
-    jobject packageManagerObject = (env)->CallObjectMethod(contextObject, getPackageManagerId);
-    jstring packNameString = (jstring) (env)->CallObjectMethod(contextObject, getPackageNameId);
-    jobject packageInfoObject = (env)->CallObjectMethod(packageManagerObject, getPackageInfoId,
-                                                        packNameString, 64);
-    jfieldID signaturefieldID = (env)->GetFieldID(packageInfoClass, "signatures",
-                                                  "[Landroid/content/pm/Signature;");
-    jobjectArray signatureArray = (jobjectArray) (env)->GetObjectField(packageInfoObject,
-                                                                       signaturefieldID);
-    jobject signatureObject = (env)->GetObjectArrayElement(signatureArray, 0);
+    jobject packageManagerObject = env->CallObjectMethod(contextObject, getPackageManagerId);
+    if (!packageManagerObject) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageManager");
+        return env->NewStringUTF("");
+    }
+
+    jstring packNameString = (jstring) env->CallObjectMethod(contextObject, getPackageNameId);
+    if (!packNameString) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get package name");
+        return env->NewStringUTF("");
+    }
+
+    jobject packageInfoObject = env->CallObjectMethod(packageManagerObject, getPackageInfoId,
+                                                    packNameString, 64);
+    if (!packageInfoObject) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
+        return env->NewStringUTF("");
+    }
+
+    // 鑾峰彇绛惧悕鏁扮粍瀛楁ID
+    jfieldID signaturefieldID = env->GetFieldID(packageInfoClass, "signatures",
+                                              "[Landroid/content/pm/Signature;");
+    if (!signaturefieldID) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
+        return env->NewStringUTF("");
+    }
+
+    // 鑾峰彇绛惧悕鏁扮粍
+    jobjectArray signatureArray = (jobjectArray) env->GetObjectField(packageInfoObject,
+                                                                   signaturefieldID);
+    if (!signatureArray || env->GetArrayLength(signatureArray) == 0) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
+        return env->NewStringUTF("");
+    }
+
+    // 鑾峰彇绗竴涓鍚嶅璞�
+    jobject signatureObject = env->GetObjectArrayElement(signatureArray, 0);
+    if (!signatureObject) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
+        return env->NewStringUTF("");
+    }
 
     // 鑾峰彇绛惧悕瀛楃涓�
-    const char *signStrng = (env)->GetStringUTFChars(
-            (jstring) (env)->CallObjectMethod(signatureObject, signToStringId), 0);
+    jstring signatureString = (jstring) env->CallObjectMethod(signatureObject, signToStringId);
+    if (!signatureString) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
+        return env->NewStringUTF("");
+    }
 
-    // 璋冭瘯鏃ュ織杈撳嚭
-    __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "Current signature: %s", signStrng);
+    // 鑾峰彇绛惧悕瀛楃涓茬殑UTF-8瀛楃
+    const char *signStrng = env->GetStringUTFChars(signatureString, 0);
+    if (!signStrng) {
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
+        return env->NewStringUTF("");
+    }
+
+    // 杈撳嚭褰撳墠绛惧悕鐢ㄤ簬璋冭瘯
+//    __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "Current signature: %s", signStrng);
 
     // 楠岃瘉绛惧悕骞惰繑鍥炴墍鏈夋墖鍖哄瘑鐮�
     if (strcmp(signStrng, RELEASE_SIGN) == 0) {
-        size_t numKeys = sizeof(ENCRYPTED_SECTOR_KEYS) / 12; // 姣忎釜瀵嗛挜12瀛楄妭
-        char *allKeys = new char[numKeys * 13]; // 涓烘瘡涓瘑閽ラ鐣�12涓瓧绗�+1涓垎闅旂
-        allKeys[0] = '\0';
+        // 璁$畻瀵嗛挜鏁伴噺
+        size_t numKeys = sizeof(ENCRYPTED_SECTOR_KEYS) / 12;
+        std::string result;
+        result.reserve(numKeys * 13);  // 姣忎釜瀵嗛挜12涓瓧绗�+1涓垎闅旂
 
+        // 瑙e瘑骞惰浆鎹㈡瘡涓墖鍖哄瘑閽�
         for (size_t i = 0; i < numKeys; i++) {
-            char decrypted[13];
-            decrypt_key(ENCRYPTED_SECTOR_KEYS + (i * 12), decrypted, 12);
-
-            strcat(allKeys, decrypted);
-            if (i < numKeys - 1) {
-                strcat(allKeys, ",");
+//            __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "澶勭悊鎵囧尯 %zu 鐨勫瘑閽�", i);
+            
+            // 纭繚涓嶄細瓒婄晫璁块棶
+            if (i * 12 + 6 > sizeof(ENCRYPTED_SECTOR_KEYS)) {
+                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
+                break;
             }
+            
+            // 鑾峰彇瑙e瘑鍚庣殑瀛楃涓�
+            jstring decrypted_str = decrypt_key(env, ENCRYPTED_SECTOR_KEYS + (i * 12), 6);
+            
+            if (!decrypted_str) {
+//                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
+                continue;
+            }
+            
+            // 杞崲鎴怌瀛楃涓�
+            const char* decrypted_chars = env->GetStringUTFChars(decrypted_str, 0);
+            
+            if (i > 0) {
+                result += ",";  // 娣诲姞鍒嗛殧绗�
+            }
+            result += decrypted_chars;  // 浣跨敤瑙e瘑鍚庣殑鏁版嵁
+            
+            // 閲婃斁璧勬簮
+            env->ReleaseStringUTFChars(decrypted_str, decrypted_chars);
+            env->DeleteLocalRef(decrypted_str);
         }
 
-        jstring result = (env)->NewStringUTF(allKeys);
-        delete[] allKeys;
-        return result;
+        // 閲婃斁璧勬簮骞惰繑鍥炵粨鏋�
+        env->ReleaseStringUTFChars(signatureString, signStrng);
+        return env->NewStringUTF(result.c_str());
     } else {
-        return (env)->NewStringUTF("signature_verification_failed");
+        // 绛惧悕楠岃瘉澶辫触
+        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Signature verification failed");
+        env->ReleaseStringUTFChars(signatureString, signStrng);
+        return env->NewStringUTF("");
     }
 }
 
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
index 956bdc4..bab9b4d 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
@@ -1,8 +1,10 @@
 package com.dayu.general.activity
 
+import android.content.Intent
 import android.os.Bundle
 import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
 import com.dayu.general.databinding.ActivityManageListGeBinding
+import com.dayu.general.tool.CardCommon
 
 class ManageListActivity : BaseActivity() {
 
@@ -16,6 +18,17 @@
 
     fun initView() {
         binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+        binding?.tvCleanCard?.setOnClickListener {
+            var intent = Intent(this, ManagerReadActivity::class.java)
+            intent.putExtra("cardType", CardCommon.CLEAN_CARD_TYPE)
+            startActivity(intent)
+        }
+        binding?.tvCheckCard?.setOnClickListener {
+            var intent = Intent(this, ManagerReadActivity::class.java)
+            intent.putExtra("cardType", CardCommon.CHECK_CARD)
+            startActivity(intent)
+        }
+
     }
 
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
new file mode 100644
index 0000000..1c218d7
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
@@ -0,0 +1,144 @@
+package com.dayu.general.activity
+
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.databinding.DataBindingUtil
+import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.BaseCommon
+import com.dayu.baselibrary.utils.ToastUtil
+import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
+import com.dayu.general.R
+import com.dayu.general.databinding.ActivityManagerReadBinding
+import com.dayu.general.model.CardInfoModel
+import com.dayu.general.net.ApiManager
+import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.NfcReadHelper
+
+class ManagerReadActivity : BaseNfcActivity() {
+
+    private lateinit var binding: ActivityManagerReadBinding
+    private val viewModel: CardInfoModel = CardInfoModel()
+    var cardType = ""
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        // 鍒濆鍖栨暟鎹粦瀹�
+        binding = DataBindingUtil.setContentView(this, R.layout.activity_manager_read)
+        binding.lifecycleOwner = this
+        binding.viewModel = viewModel
+        if (intent.hasExtra("cardType")) {
+            cardType = intent.getStringExtra("cardType").toString()
+        }
+
+        initView()
+        initListener()
+    }
+
+    private fun initView() {
+        binding.titleBar.setCenterText("璇诲崱")
+        binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+        binding.btnNext.setOnClickListener {
+            if (viewModel.cardNumber.value.isNullOrEmpty()) {
+                ToastUtil.show("璇峰厛璇诲彇鍗″彿")
+            } else {
+                postCardData(cardType, viewModel.cardNumber.value!!, getRemark())
+            }
+
+        }
+    }
+
+    private fun initListener() {
+        binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { finish() }
+    }
+
+    /**
+     * 璁剧疆鍗″彿
+     */
+    fun setCardNumber(cardNumber: String) {
+        viewModel.setCardNumber(cardNumber)
+    }
+
+    /**
+     * 鑾峰彇澶囨敞淇℃伅
+     */
+    fun getRemark(): String = viewModel.remark.value ?: ""
+
+    override fun onNfcBack(intent: Intent) {
+        // 澶勭悊NFC璇诲彇缁撴灉
+        NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber ->
+            if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
+                binding.btnNext.visibility = View.VISIBLE
+                binding.dataLayout.visibility = View.VISIBLE
+                binding.rechargeReadLL.visibility = View.GONE
+                setCardNumber(cardNumber)
+            } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
+                ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱")
+            }
+        }
+    }
+
+
+private fun bytesToHexString(bytes: ByteArray?): String? {
+    if (bytes == null || bytes.isEmpty()) return null
+    val sb = StringBuilder()
+    for (b in bytes) {
+        sb.append(String.format("%02X", b))
+    }
+    return sb.toString()
+}
+
+
+/**
+ * 鎻愪氦鏁版嵁
+ */
+fun postCardData(cardType: String, cardAddr: String, remark: String) {
+
+    val map = mutableMapOf<String, Any>()
+
+    if (cardAddr.isNotEmpty()) {
+        map["cardAddr"] = cardAddr
+    }
+
+    if (cardType.isNotEmpty()) {
+//            map["cardType"] = cardType
+        map["cardType"] = "5"
+    }
+    if (remark.isNotEmpty()) {
+        map["remarks"] = remark
+    }
+    // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
+    ApiManager.getInstance().requestPostLoading(
+        this,
+        "/sell/card/create_manager_card",
+        String::class.java,
+        map,
+        object : SubscriberListener<BaseResponse<String>>() {
+            override fun onNext(t: BaseResponse<String>) {
+                if (t.success) {
+                    var intent = Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply {
+                        putExtra("cardAddr", cardAddr)
+                        putExtra("orderId", t.content)
+                        putExtra("cardType", cardType)
+                    }
+                    this@ManagerReadActivity.finish()
+                    startActivity(intent)
+                } else {
+                    // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
+                    ToastUtil.show(t.msg)
+                }
+            }
+
+            override fun onError(e: Throwable?) {
+                super.onError(e)
+                ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+            }
+        }
+    )
+
+
+}
+
+
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
index 45d5bba..cd60f9c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -1,20 +1,27 @@
-package com.dayu.general.activity
+    package com.dayu.general.activity
 
 import android.content.Intent
 import android.os.Bundle
+import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.ToastUtil
+import com.dayu.general.bean.card.ClearCard
 import com.dayu.general.tool.CardCommon
 import com.dayu.general.databinding.ActivityNfcWriteGeBinding
+import com.dayu.general.net.ApiManager
+import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.NfcReadHelper
+import com.dayu.general.tool.NfcWreatHelper
 
 /**
  * @author: zuo
  * @date: 2021/3/30
  * @description:鍐欏崱鐣岄潰
  */
-class NfcWreatActivity:BaseNfcActivity() {
-
-    var binding:ActivityNfcWriteGeBinding? = null
-
+class NfcWreatActivity : BaseNfcActivity() {
+    var binding: ActivityNfcWriteGeBinding? = null
     var cardType = ""
+    var orderId = ""
+    var cardAddr = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -26,25 +33,89 @@
     /**
      * 鑾峰彇鏁版嵁
      */
-    private fun getInitData(){
-        cardType= intent?.getStringExtra("cardType")?:""
+    private fun getInitData() {
+        cardType = intent?.getStringExtra("cardType") ?: ""
+        orderId = intent?.getStringExtra("orderId") ?: ""
+        cardAddr = intent?.getStringExtra("cardAddr") ?: ""
+        if (cardType.isNotEmpty()) {
+            when (cardType) {
+                CardCommon.CLEAN_CARD_TYPE -> {
+                    binding?.cardData?.text = "娓呴浂鍗″啓鍗�"
+                }
+
+            }
+        }
+
     }
 
-    private fun setTextData(){
-        when(cardType){
-            CardCommon.CHECK_CARD->{
-                binding?.cardData?.text = "鍐欑敤鎴峰崱"
-            }
 
+    override fun onNfcBack(intent: Intent) {
+        val nfcReadHelper = NfcReadHelper.getInstance(intent, this)
+        val cardNumber = nfcReadHelper.getCardNumberNoClose()
+        if (cardNumber.isNotEmpty() && cardNumber == cardAddr) {
+            val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this)
+            when (cardType) {
+                CardCommon.CLEAN_CARD_TYPE -> {
+                    var clearCard = ClearCard()
+                    nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message ->
+                        if (success) {
+                            postCardData(cardType, cardAddr, "")
+                            ToastUtil.show("鍐欏崱鎴愬姛!")
+                            // 澶勭悊鍐欏崱鎴愬姛鐨勬儏鍐�
+                        } else {
+                            // 澶勭悊鍐欏崱澶辫触鐨勬儏鍐�
+                            ToastUtil.show(message)
+                        }
+                    }
+                }
+            }
+        } else {
+            ToastUtil.show("鍗$墖閿欒锛屽綋鍓嶅埛鐨勫崱涓庡垰鍒氱殑鍗′笉涓�鑷�")
         }
     }
-    override fun onNfcBack(intent: Intent?) {
-        TODO("Not yet implemented")
-        when(cardType){
-            CardCommon.CHECK_CARD->{
+
+    fun postCardData(cardType: String, cardAddr: String, remark: String) {
+        when (cardType) {
+            CardCommon.CHECK_CARD -> {
                 binding?.cardData?.text = "鍐欑敤鎴峰崱"
             }
-
         }
+        val map = mutableMapOf<String, Any>()
+
+        if (cardAddr.isNotEmpty()) {
+            map["cardAddr"] = cardAddr
+        }
+
+        if (cardType.isNotEmpty()) {
+//            map["cardType"] = cardType
+            map["cardType"] = "5"
+        }
+        if (remark.isNotEmpty()) {
+            map["remarks"] = remark
+        }
+        // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
+        ApiManager.getInstance().requestPostLoading(
+            this,
+            "/sell/card/call_back",
+            String::class.java,
+            map,
+            object : SubscriberListener<BaseResponse<String>>() {
+                override fun onNext(t: BaseResponse<String>) {
+                    if (t.success) {
+                        this@NfcWreatActivity.finish()
+                    } else {
+                        // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
+                        ToastUtil.show(t.msg)
+                    }
+                }
+
+                override fun onError(e: Throwable?) {
+                    super.onError(e)
+                    ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+                }
+            }
+        )
     }
+
+
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/card/BaseCard.kt b/generallibrary/src/main/java/com/dayu/general/bean/card/BaseCard.kt
index 7a8f09f..0429fcf 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/card/BaseCard.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/card/BaseCard.kt
@@ -1,12 +1,12 @@
 package com.dayu.general.bean.card
 
-import com.dayu.baselibrary.tools.HexUtil
+import com.dayu.baselibrary.tools.BaseCard
 import com.dayu.general.bean.db.CardData
 import com.dayu.general.dao.AppDataBase
 import com.dayu.general.tool.CardCommon
 import com.tencent.bugly.crashreport.CrashReport
 
-open class BaseCard {
+open class BaseCard : BaseCard() {
     var cardData: String? = null //鏍囪瘑鐮�
 
     companion object {
@@ -33,25 +33,25 @@
     }
 
 
-    /**
-     * 鍓�15涓瓧鑺傜畻鏈疮鍔犲拰 涓嶅惈杩涗綅
-     *
-     * @param data 婧愭暟鎹�
-     * @return 16杩涘埗
-     */
-    fun getByteSum(data: ByteArray?): Byte {
-        if (data != null) {
-            var sum = 0
-            for (b in data) {
-                sum += b.toInt() and 0xFF // & 0xFF 鍙互灏嗗瓧鑺傛墿灞曚负姝f暣鏁帮紝閬垮厤绗﹀彿浣嶇殑褰卞搷
-            }
-            var hex = HexUtil.get10to16CompleteHex(sum)
-            hex = HexUtil.spaceHex(hex)
-            val hexArr = hex.split(" ".toRegex()).dropLastWhile { it.isEmpty() }
-                .toTypedArray()
-            return HexUtil.hexToByte(hexArr[hexArr.size - 1])
-        }
-        return 0
-    }
+//    /**
+//     * 鍓�15涓瓧鑺傜畻鏈疮鍔犲拰 涓嶅惈杩涗綅
+//     *
+//     * @param data 婧愭暟鎹�
+//     * @return 16杩涘埗
+//     */
+//    fun getByteSum(data: ByteArray?): Byte {
+//        if (data != null) {
+//            var sum = 0
+//            for (b in data) {
+//                sum += b.toInt() and 0xFF // & 0xFF 鍙互灏嗗瓧鑺傛墿灞曚负姝f暣鏁帮紝閬垮厤绗﹀彿浣嶇殑褰卞搷
+//            }
+//            var hex = HexUtil.get10to16CompleteHex(sum)
+//            hex = HexUtil.spaceHex(hex)
+//            val hexArr = hex.split(" ".toRegex()).dropLastWhile { it.isEmpty() }
+//                .toTypedArray()
+//            return HexUtil.hexToByte(hexArr[hexArr.size - 1])
+//        }
+//        return 0
+//    }
 
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt
index 243f3ea..9436dd7 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt
@@ -10,7 +10,7 @@
 /**
  * 閫氱敤椤圭洰鐢ㄦ埛鍗$粨鏋�
  */
-class UserCard : BaseCard(), Serializable {
+class UserCard : BaseUserCardCard(), Serializable {
     var cardType: String = USER_CARD_TYPE_1 // 鍗$被鍨嬶細A1缁堢鍐欏崱 A8鍒峰崱寮�娉靛悗鍊� A2鍙犲姞鍏呭��
     var areaNumber: Int = 0 // 鍥藉琛屾斂鍖哄煙鍙�(12浣岯CD,绮剧‘鍒版潙)
     var userCode: String = "" // 鐢ㄦ埛缂栧彿BCD
@@ -30,10 +30,10 @@
         if (data == null || data.size < 3) {
             return false
         }
-        
+
         val expectedBytes = arrayOf(getZeroBytes(), getOneBytes(), getTwoBytes())
-        return data.zip(expectedBytes.toList()).all { (actual, expected) -> 
-            actual.contentEquals(expected) 
+        return data.zip(expectedBytes.toList()).all { (actual, expected) ->
+            actual.contentEquals(expected)
         }
     }
 
@@ -47,7 +47,7 @@
     /**
      * 閫氳繃byte杞琤ean
      */
-     fun getBean(data: List<ByteArray>): UserCard? {
+    override fun getBean(data: List<ByteArray>): UserCard? {
         try {
             val userCard = UserCard()
             // 瑙f瀽绗�0鍧�
@@ -75,7 +75,7 @@
                 balance = HexUtil.get16To10LowHightByBytes(one.copyOfRange(1, 5))
                 surplusWater = HexUtil.get16To10LowHightByBytes(one.copyOfRange(5, 9))
                 electricPrice = HexUtil.hexToFloatLowHigh(one.copyOfRange(9, 11))
-                
+
                 // 瑙f瀽鍏呭�兼椂闂�
                 val year = HexUtil.getBcdToInt(one[11])
                 val month = HexUtil.getBcdToInt(one[12])
@@ -134,19 +134,19 @@
             val data = ByteArray(16)
             try {
                 data[0] = projectCode.toByte()
-                
+
                 // 璁剧疆浣欓
                 val balanceBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance))
                 System.arraycopy(balanceBytes, 0, data, 1, 4)
-                
+
                 // 璁剧疆鍓╀綑姘撮噺
                 val waterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater))
                 System.arraycopy(waterBytes, 0, data, 5, 4)
-                
+
                 // 璁剧疆鐢典环
                 val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(electricPrice))
                 System.arraycopy(priceBytes, 0, data, 9, 2)
-                
+
                 // 璁剧疆鍏呭�兼椂闂�
                 rechargeDate?.let {
                     data[11] = HexUtil.getIntToBCD(it.get(Calendar.YEAR) % 100)[0]
@@ -154,7 +154,7 @@
                     data[13] = HexUtil.getIntToBCD(it.get(Calendar.DAY_OF_MONTH))[0]
                     data[14] = HexUtil.getIntToBCD(it.get(Calendar.HOUR_OF_DAY))[0]
                 }
-                
+
                 data[15] = getByteSum(data)
             } catch (e: Exception) {
                 e.printStackTrace()
@@ -170,14 +170,14 @@
                 // 澶囦唤浣欓鍜屾按閲忔暟鎹�
                 val balanceBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance))
                 System.arraycopy(balanceBytes, 0, data, 1, 4)
-                
+
                 val waterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater))
                 System.arraycopy(waterBytes, 0, data, 5, 4)
-                
+
                 // 璁剧疆姘翠环
                 val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(waterPrice))
                 System.arraycopy(priceBytes, 0, data, 9, 2)
-                
+
                 // 璁剧疆鍏呭�兼椂闂�
                 rechargeDate?.let {
                     data[11] = HexUtil.getIntToBCD(it.get(Calendar.YEAR) % 100)[0]
@@ -185,7 +185,7 @@
                     data[13] = HexUtil.getIntToBCD(it.get(Calendar.DAY_OF_MONTH))[0]
                     data[14] = HexUtil.getIntToBCD(it.get(Calendar.HOUR_OF_DAY))[0]
                 }
-                
+
                 data[15] = getByteSum(data)
             } catch (e: Exception) {
                 e.printStackTrace()
@@ -194,7 +194,7 @@
         }
     }
 
-    fun getZeroBytes(): ByteArray = Zero().toBytes()
-    fun getOneBytes(): ByteArray = One().toBytes()
-    fun getTwoBytes(): ByteArray = Two().toBytes()
+    override fun getZeroBytes(): ByteArray = Zero().toBytes()
+    override fun getOneBytes(): ByteArray = One().toBytes()
+    override fun getTwoBytes(): ByteArray = Two().toBytes()
 }
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/GeBaseHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/GeBaseHelper.kt
index 1a80899..c2d4b5d 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/GeBaseHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/GeBaseHelper.kt
@@ -1,19 +1,18 @@
 package com.dayu.general.tool
 
 import android.content.Context
-import android.util.Base64
 import com.dayu.baselibrary.tools.HexUtil
 import com.dayu.baselibrary.tools.nfc.BaseNFCHelper
-import java.nio.charset.StandardCharsets
-import javax.crypto.Cipher
-import javax.crypto.spec.SecretKeySpec
 
 open class GeBaseHelper(private val context: Context) : BaseNFCHelper() {
 
-
     companion object {
         init {
-            System.loadLibrary("general-native-lib")
+            try {
+                System.loadLibrary("general-native-lib")
+            } catch (e: UnsatisfiedLinkError) {
+                e.printStackTrace()
+            }
         }
     }
 
@@ -23,17 +22,20 @@
         try {
             // 鑾峰彇鎵�鏈夋墖鍖哄瘑閽�
             val allKeys: String = getM1SectorKeySecure(context, 0)
-            val keys: Array<String> =
-                allKeys.split(",").dropLastWhile { it.isEmpty() }.toTypedArray()
-            for (i in keys.indices) {
-                val key = keys[i]
-                listA_PS.add(HexUtil.hexToByteArray(key))
+            if (allKeys.isNotEmpty()) {
+                val keys: Array<String> = allKeys.split(",").dropLastWhile { it.isEmpty() }.toTypedArray()
+                for (i in keys.indices) {
+                    val key = keys[i]
+                    if (key.isNotEmpty()) {
+                        listA_PS.add(HexUtil.hexToByteArray(key))
+                    }
+                }
             }
             defauleKey = HexUtil.hexToByteArray("FFFFFFFFFFFF")
-
-
         } catch (e: Exception) {
             e.printStackTrace()
+            // 璁剧疆榛樿瀵嗛挜
+            defauleKey = HexUtil.hexToByteArray("FFFFFFFFFFFF")
         }
     }
 
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
index 7f2d7ab..a8f81f1 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
@@ -18,11 +18,11 @@
         /**
          * 鍗曚緥鍒濆鍖�
          */
-        @JvmStatic
         fun getInstance(intent: Intent, activity: Activity): NfcReadHelper {
             if (helper == null) {
                 helper = NfcReadHelper(intent, activity)
             }
+            helper!!.adapter.setIntent(intent)
             return helper!!
         }
     }
@@ -41,6 +41,18 @@
         }
     }
 
+    fun getCardNumberNoClose():String{
+        return try {
+            adapter.cardNumberNoClose
+        } catch (e: Exception) {
+            e.printStackTrace()
+            ""
+        }
+    }
+
+
+
+
     /**
      * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�
      */
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
new file mode 100644
index 0000000..12a6fe4
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
@@ -0,0 +1,63 @@
+package com.dayu.general.tool
+
+import android.app.Activity
+import android.content.Intent
+import com.dayu.baselibrary.tools.nfc.NFCCallBack
+import com.dayu.baselibrary.tools.nfc.NfcWriteAdapter
+import com.dayu.general.bean.card.UserCard
+
+class NfcWreatHelper private constructor(intent: Intent, activity: Activity) : GeBaseHelper(activity) {
+
+    private val adapter: NfcWriteAdapter = NfcWriteAdapter(intent, activity)
+
+    companion object {
+        private var helper: NfcWreatHelper? = null
+
+        /**
+         * 鍗曚緥鍒濆鍖�
+         */
+        @JvmStatic
+        fun getInstance(intent: Intent, activity: Activity): NfcWreatHelper {
+            if (helper == null) {
+                helper = NfcWreatHelper(intent, activity)
+            }
+            helper!!.adapter.setIntent(intent)
+            return helper!!
+        }
+    }
+
+
+    /**
+     * 鍐欏崱
+     *
+     * @param str 涔﹀啓鍐呭锛�16涓瓧鑺�
+     * @param a   涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
+     * @param b   涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
+     * @param
+     */
+    fun writeData(str: ByteArray?, a: Int, b: Int,callBack: NFCCallBack): Boolean {
+        try {
+            return adapter.writeData(str, a, b,callBack)
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return false
+    }
+
+    /**
+     * 鍐欏崱
+     *
+     * @param userCard 鐢ㄦ埛鍗″唴瀹�
+     * @param
+     */
+    fun writeUserData(userCard: UserCard): Boolean {
+        try {
+            return adapter.writeUserData(userCard,7)
+        } catch (e: java.lang.Exception) {
+            e.printStackTrace()
+        }
+        return false
+    }
+
+
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_manager_read.xml b/generallibrary/src/main/res/layout/activity_manager_read.xml
index 19ef124..3ecb3e6 100644
--- a/generallibrary/src/main/res/layout/activity_manager_read.xml
+++ b/generallibrary/src/main/res/layout/activity_manager_read.xml
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-    
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
     <data>
+
         <variable
             name="viewModel"
             type="com.dayu.general.model.CardInfoModel" />
@@ -25,14 +26,16 @@
         <LinearLayout
             android:id="@+id/data_layout"
             android:layout_width="match_parent"
+            android:layout_height="wrap_content"
             android:layout_below="@+id/titleBar"
             android:orientation="vertical"
-            android:layout_height="wrap_content">
+            android:visibility="gone">
+
             <LinearLayout
                 android:layout_width="match_parent"
-                android:orientation="vertical"
-                android:layout_height="wrap_content">
-                
+                android:layout_height="wrap_content"
+                android:orientation="vertical">
+
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -44,15 +47,15 @@
                         android:layout_height="wrap_content"
                         android:text="鍗″彿锛�"
                         android:textColor="#333333"
-                        android:textSize="16sp"/>
+                        android:textSize="16sp" />
 
                     <TextView
                         android:id="@+id/card_number_tv"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
+                        android:text="@{viewModel.cardNumber}"
                         android:textColor="#333333"
-                        android:textSize="16sp"
-                        android:text="@{viewModel.cardNumber}"/>
+                        android:textSize="16sp" />
                 </LinearLayout>
 
                 <LinearLayout
@@ -66,7 +69,7 @@
                         android:layout_height="wrap_content"
                         android:text="澶囨敞锛�"
                         android:textColor="#333333"
-                        android:textSize="16sp"/>
+                        android:textSize="16sp" />
 
                     <EditText
                         android:id="@+id/remark_et"
@@ -74,8 +77,9 @@
                         android:layout_height="wrap_content"
                         android:background="@null"
                         android:hint="璇疯緭鍏ュ娉ㄤ俊鎭�"
-                        android:textSize="16sp"
-                        android:text="@={viewModel.remark}"/>
+
+                        android:text="@={viewModel.remark}"
+                        android:textSize="16sp" />
                 </LinearLayout>
 
             </LinearLayout>
@@ -122,5 +126,21 @@
                 </LinearLayout>
             </androidx.cardview.widget.CardView>
         </LinearLayout>
+
+        <TextView
+            android:id="@+id/btn_next"
+            android:layout_width="match_parent"
+            android:layout_height="56dp"
+            android:layout_alignParentBottom="true"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginBottom="16dp"
+            android:background="#4285F4"
+            android:gravity="center"
+            android:visibility="gone"
+            android:text="涓嬩竴姝�"
+            android:textColor="#FFFFFF"
+            android:textSize="16sp" />
+
     </RelativeLayout>
 </layout>
\ No newline at end of file
diff --git a/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NFCWriteHelper.java b/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NFCWriteHelper.java
index 4185498..44d707e 100644
--- a/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NFCWriteHelper.java
+++ b/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NFCWriteHelper.java
@@ -34,6 +34,7 @@
         if (helper == null) {
             helper = new NFCWriteHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 
@@ -46,7 +47,7 @@
      */
     public boolean writeUserData(UserCardHN userCard) {
         try {
-            return adapter.writeUserData(userCard);
+            return adapter.writeUserData(userCard,1);
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NfcReadHelper.java b/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NfcReadHelper.java
index 5d89c30..356b0e0 100644
--- a/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NfcReadHelper.java
+++ b/henanlibrary/src/main/java/com/dayu/henanlibrary/tools/NfcReadHelper.java
@@ -7,9 +7,6 @@
 import com.dayu.baselibrary.tools.nfc.NfcReadAdapter;
 import com.dayu.henanlibrary.card.UserCardHN;
 
-import java.util.Collections;
-import java.util.List;
-
 /**
  * @author zx
  * @date 2018/4/23 14:31
@@ -39,6 +36,7 @@
         if (helper == null) {
             helper = new NfcReadHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 
diff --git a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NFCWriteHelper.java b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NFCWriteHelper.java
index 807013a..452692d 100644
--- a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NFCWriteHelper.java
+++ b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NFCWriteHelper.java
@@ -2,16 +2,10 @@
 
 import android.app.Activity;
 import android.content.Intent;
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
 import android.nfc.tech.MifareClassic;
-import android.util.Log;
 
-import com.dayu.baselibrary.tools.HexUtil;
 import com.dayu.baselibrary.tools.nfc.NfcWriteAdapter;
 import com.dayu.qihealonelibrary.card.UserCard;
-
-import java.io.IOException;
 
 /**
  * @author zx
@@ -41,6 +35,7 @@
         if (helper == null) {
             helper = new NFCWriteHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 
@@ -53,7 +48,7 @@
      */
     public boolean writeUserData(UserCard userCard) {
         try {
-            return adapter.writeUserData(userCard);
+            return adapter.writeUserData(userCard,1);
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NfcReadHelper.java b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NfcReadHelper.java
index f17e28b..8b61f56 100644
--- a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NfcReadHelper.java
+++ b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/NfcReadHelper.java
@@ -39,6 +39,7 @@
         if (helper == null) {
             helper = new NfcReadHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 
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 c766431..cb10e99 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
@@ -2,18 +2,10 @@
 
 import android.app.Activity;
 import android.content.Intent;
-import android.nfc.NfcAdapter;
-import android.nfc.Tag;
 import android.nfc.tech.MifareClassic;
-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
@@ -43,6 +35,7 @@
         if (helper == null) {
             helper = new NFCWriteHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 
@@ -55,7 +48,7 @@
      */
     public boolean writeUserData(UserCard userCard) {
         try {
-            return adapter.writeUserData(userCard);
+            return adapter.writeUserData(userCard,1);
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java
index 8acb2c3..78d8ed3 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java
@@ -38,6 +38,7 @@
         if (helper == null) {
             helper = new NfcReadHelper(intent, activity);
         }
+        helper.adapter.setIntent(intent);
         return helper;
     }
 

--
Gitblit v1.8.0