From f5180b600511d1871635bd364beb5bdd15f6ae88 Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期三, 26 三月 2025 18:05:07 +0800
Subject: [PATCH] feat(nfc): 优化 NFC写卡功能并添加新方法- 在 BaseNfcWriteHelper 中添加了新的 writeData 方法,增加了 isConnect 参数 - 优化了 NativeNfcWriteHelper 中的 writeData 实现,支持选择性连接 NFC - 更新了 NfcWriteAdapter,支持新的 writeData 方法- 修改了 NfcWreatHelper 中的 writeData 方法,使用新的接口 - 优化了 NfcWreatActivity 中的写卡逻辑

---
 generallibrary/src/main/java/com/dayu/general/activity/LoginActivity.kt            |    3 -
 generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt                   |    3 +
 generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt               |    2 
 generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt             |   26 ++++++++++++-
 generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt               |    3 +
 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt         |    6 ++-
 generallibrary/src/main/res/layout/fragment_my.xml                                 |    2 +
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/BaseNfcWriteHelper.java   |    1 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java |   27 +++++++++----
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java      |   10 +++++
 generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt       |    6 +-
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java  |    9 +++-
 generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt         |    9 ++++
 13 files changed, 85 insertions(+), 22 deletions(-)

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 80b5db4..378d4d0 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
@@ -36,6 +36,7 @@
 
     public abstract boolean writeData(byte[] str, int a, int b,NFCCallBack callBack);
 
+    public abstract boolean writeData(byte[] str, int a, int b,boolean isConnect,NFCCallBack callBack);
     /**
      * 淇敼瀵嗙爜
      *
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 1080205..4c8aa09 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
@@ -128,7 +128,6 @@
 
     @Override
     public String getCradType() {
-
         MifareClassic mfc = MifareClassic.get(tag);
         if (null != mfc) {
             try {
@@ -402,7 +401,9 @@
                         }
                     }
                 } else if (!listA_PS.isEmpty()) {
-                    if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
+                    if (mfc.authenticateSectorWithKeyA(0, defauleKey)) {
+                        isOpen = true;
+                    } else if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
                         isOpen = true;
                     }
                 }
@@ -448,7 +449,9 @@
                         }
                     }
                 } else if (!listA_PS.isEmpty()) {
-                    if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
+                    if (mfc.authenticateSectorWithKeyA(0, defauleKey)) {
+                        isOpen = true;
+                    } else if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(0))) {
                         isOpen = true;
                     }
                 }
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java
index 612e0b6..c427898 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
@@ -125,6 +125,11 @@
 
     @Override
     public boolean writeData(byte[] str, int a, int b, NFCCallBack callBack) {
+        return writeData(str, a, b, true,null);
+    }
+
+    @Override
+    public boolean writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) {
         Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
         if (str.length == 16) {
             try {
@@ -132,7 +137,9 @@
                 if (null != mfc) {
                     try {
                         //杩炴帴NFC
-                        mfc.connect();
+                        if (isConnect){
+                            mfc.connect();
+                        }
                         //鑾峰彇鎵囧尯鏁伴噺
                         int count = mfc.getSectorCount();
                         //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉�
@@ -165,12 +172,12 @@
                                 }
                             }
                         } else if (listA_PS.size() != 0 && listA_PS.size() > a) {
-                            if (mfc.authenticateSectorWithKeyA(0, listA_PS.get(a))) {
+                            if (mfc.authenticateSectorWithKeyA(a, defauleKey)){
+                                changePasword(a, mfc);
                                 isOpen = true;
-                                if (listKeyA.get(a).equals(defauleKey)) {
-                                    //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
-                                    changePasword(a, mfc);
-                                }
+
+                            }else if (mfc.authenticateSectorWithKeyA(a, listA_PS.get(a))) {
+                                isOpen = true;
                             }
                         }
                         if (isOpen) {
@@ -227,11 +234,15 @@
                 }
             } catch (Exception e) {
                 e.printStackTrace();
-                callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage());
+                if (callBack != null) {
+                    callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊" + e.getMessage());
+                }
                 return false;
             }
         } else {
-            callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊锛宐yte鏁扮粍澶у皬涓嶄负16");
+            if (callBack != null) {
+                callBack.isSusses(false, a + "鎵囧尯鍐欏崱鎶ラ敊锛宐yte鏁扮粍澶у皬涓嶄负16");
+            }
         }
         return false;
     }
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 84d11e5..c3db8f3 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
@@ -61,6 +61,16 @@
     }
 
     @Override
+    public boolean writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) {
+        switch (BaseNfcActivity.adapterType) {
+            case ModelUtils.defaultType:
+                return nativeNfcWriteHelper.writeData(str, a, b,isConnect,callBack);
+
+        }
+        return false;
+    }
+
+    @Override
     public boolean changePasword(int a, MifareClassic mfc) {
         switch (BaseNfcActivity.adapterType) {
             case ModelUtils.defaultType:
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
new file mode 100644
index 0000000..bfd1ded
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
@@ -0,0 +1,9 @@
+package com.dayu.general.activity
+
+class CardListActivity:BaseActivity() {
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/LoginActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/LoginActivity.kt
index 4839223..0ba2d6c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/LoginActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/LoginActivity.kt
@@ -1,13 +1,11 @@
 package com.dayu.general.activity
 
 import android.app.Activity
-import android.content.Context
 import android.content.Intent
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
 import com.dayu.baselibrary.utils.ToastUtil
 import com.dayu.general.BaseApplication
 import com.dayu.general.bean.net.LoginResult
-import com.dayu.general.bean.net.SearchUserResult
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
 
@@ -46,6 +44,7 @@
                             BaseApplication.userId = t.content?.id ?: ""
                             val intent = Intent(myContext, MainActivity::class.java)
                             myContext.startActivity(intent)
+                            myContext.finish()
                         } else {
                             // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
                             ToastUtil.show(t.msg)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
index e589145..6d9dc1c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
@@ -1,7 +1,9 @@
 package com.dayu.general.activity
 
 import android.os.Bundle
+import android.view.KeyEvent
 import android.view.LayoutInflater
+import android.widget.Toast
 import androidx.core.content.ContextCompat
 import androidx.fragment.app.Fragment
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
@@ -9,7 +11,6 @@
 import com.dayu.general.BaseApplication
 import com.dayu.general.R
 import com.dayu.general.adapter.TabAdapter
-import com.dayu.general.bean.net.LoginResult
 import com.dayu.general.bean.net.UserInfoResult
 import com.dayu.general.databinding.ActivityMainBinding
 import com.dayu.general.net.ApiManager
@@ -19,6 +20,8 @@
 
     var binding: ActivityMainBinding? = null
     private val fragments: ArrayList<Fragment> = ArrayList()
+    var mExitTime: Long = 0
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         binding = ActivityMainBinding.inflate(LayoutInflater.from(this))
@@ -26,7 +29,7 @@
         setupFragments()
         initView()
         initTab()
-        getUserInfo();
+        getUserInfo()
     }
 
 
@@ -149,4 +152,23 @@
             }
         }
     }
+
+
+
+    //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀�
+    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            if ((System.currentTimeMillis() - mExitTime) > 2000) {
+                Toast.makeText(this@MainActivity, "鍐嶆寜涓�娆¢��鍑虹▼搴�", Toast.LENGTH_SHORT)
+                    .show()
+                mExitTime = System.currentTimeMillis()
+            } else {
+                this@MainActivity.finish()
+            }
+            return true
+        }
+        return super.onKeyDown(keyCode, event)
+    }
+
+
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
index fb43396..bb3bf41 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
@@ -17,6 +17,9 @@
         savedInstanceState: Bundle?
     ): View? {
         binding = FragmentMyBinding.inflate(inflater, container, false)
+        binding?.logoutRL?.setOnClickListener {
+            logout()
+        }
         return binding?.root
     }
 
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 cd60f9c..8b61caa 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -88,7 +88,7 @@
 
         if (cardType.isNotEmpty()) {
 //            map["cardType"] = cardType
-            map["cardType"] = "5"
+            map["operateType"] = "1"
         }
         if (remark.isNotEmpty()) {
             map["remarks"] = remark
@@ -102,7 +102,9 @@
             object : SubscriberListener<BaseResponse<String>>() {
                 override fun onNext(t: BaseResponse<String>) {
                     if (t.success) {
+                        ToastUtil.show("鍐欏崱鎴愬姛")
                         this@NfcWreatActivity.finish()
+
                     } else {
                         // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
                         ToastUtil.show(t.msg)
@@ -111,7 +113,7 @@
 
                 override fun onError(e: Throwable?) {
                     super.onError(e)
-                    ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+                    ToastUtil.show("涓婃姤澶辫触: ${e?.message ?: "鏈煡閿欒"}")
                 }
             }
         )
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt
index 6968f84..a0c6974 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt
@@ -78,15 +78,15 @@
         val map = mutableMapOf<String, Any>()
 
         if (farmerId.isNotEmpty()) {
-            map["farmerId"] = farmerId
+            map["clientNum"] = farmerId
         }
 
         if (farmerName.isNotEmpty()) {
-            map["farmerName"] = farmerName
+            map["name"] = farmerName
         }
 
         if (cardNumber.isNotEmpty()) {
-            map["cardNumber"] = cardNumber
+            map["cardNum"] = cardNumber
         }
 
         // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
diff --git a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
index 781ce20..8e10e79 100644
--- a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
+++ b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
@@ -7,7 +7,8 @@
  */
 class NetConstans {
     companion object {
-        const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
+//        const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
+        const val BASE_URL: String = "http://192.168.40.166:54321/"
 
         const val TOKEN_INVALID: String = "0000"
     }
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
index 12a6fe4..4c5b085 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
@@ -37,7 +37,7 @@
      */
     fun writeData(str: ByteArray?, a: Int, b: Int,callBack: NFCCallBack): Boolean {
         try {
-            return adapter.writeData(str, a, b,callBack)
+            return adapter.writeData(str, a, b,false,callBack)
         } catch (e: Exception) {
             e.printStackTrace()
         }
diff --git a/generallibrary/src/main/res/layout/fragment_my.xml b/generallibrary/src/main/res/layout/fragment_my.xml
index 1494651..87243eb 100644
--- a/generallibrary/src/main/res/layout/fragment_my.xml
+++ b/generallibrary/src/main/res/layout/fragment_my.xml
@@ -311,6 +311,7 @@
                         android:textStyle="bold" />
 
                     <RelativeLayout
+                        android:id="@+id/logoutRL"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:orientation="vertical"
@@ -326,6 +327,7 @@
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_alignParentEnd="true"
+                            android:layout_centerVertical="true"
                             android:src="@drawable/ic_arrow_right"/>
                     </RelativeLayout>
 

--
Gitblit v1.8.0