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