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