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