From 44e05fc867c3f028cf110f7b2fefb417d51646b2 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 14 三月 2024 12:01:13 +0800
Subject: [PATCH] 添加密码校验 修复用户卡bug
---
app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java | 213 ++++++++++++++++++++++++++++++++++++----------------
1 files changed, 147 insertions(+), 66 deletions(-)
diff --git a/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java b/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
index 34cd956..e8ed9d6 100644
--- a/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
+++ b/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.tools;
+import android.app.Activity;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
@@ -11,7 +12,6 @@
import java.io.IOException;
import java.util.ArrayList;
-
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,7 +29,8 @@
private static NfcReadHelper helper;
- public NfcReadHelper(Intent intent) {
+ public NfcReadHelper(Intent intent, Activity activity) {
+ super(activity);
this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}
@@ -40,9 +41,9 @@
* @param intent
* @return
*/
- public static NfcReadHelper getInstence(Intent intent) {
+ public static NfcReadHelper getInstence(Intent intent, Activity activity) {
if (helper == null) {
- helper = new NfcReadHelper(intent);
+ helper = new NfcReadHelper(intent, activity);
}
return helper;
}
@@ -69,8 +70,8 @@
List<byte[]> list = new ArrayList<>();
//楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
boolean isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
- if (!isOpen){
- isOpen= mfc.authenticateSectorWithKeyA(1, companyKey);
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
}
if (isOpen) {
//鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
@@ -118,8 +119,8 @@
try {
mfc.connect();
boolean isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
- if (!isOpen){
- isOpen= mfc.authenticateSectorWithKeyA(1, companyKey);
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
}
if (isOpen) {
int bIndex = mfc.sectorToBlock(1);
@@ -152,72 +153,136 @@
*
* @param callback
*/
- public void getAllData(final NFCCallListback callback) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- Map<String, List<byte[]>> map = new HashMap<>();
- MifareClassic mfc = MifareClassic.get(tag);
- if (null != mfc) {
- try {
- //閾炬帴NFC
- mfc.connect();
- //鑾峰彇鎵囧尯鏁伴噺
- int count = mfc.getSectorCount();
- //瀛樺偍绌洪棿
- int size = mfc.getSize();
- //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
- boolean flag = false;
- for (int i = 0; i < count; i++) {
- List<byte[]> list = new ArrayList<>();
- //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
- boolean isOpen = mfc.authenticateSectorWithKeyA(i, defauleKey);
- if (!isOpen){
- isOpen = mfc.authenticateSectorWithKeyA(i, companyKey);
+ public void getAllData(final NFCCallMapback callback) {
+ Map<String, List<byte[]>> map = new HashMap<>();
+ MifareClassic mfc = MifareClassic.get(tag);
+ if (null != mfc) {
+ try {
+ //閾炬帴NFC
+ mfc.connect();
+ //鑾峰彇鎵囧尯鏁伴噺
+ int count = mfc.getSectorCount();
+ //瀛樺偍绌洪棿
+ int size = mfc.getSize();
+ //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+ boolean flag = false;
+ for (int i = 0; i < count; i++) {
+ List<byte[]> list = new ArrayList<>();
+ //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+ boolean isOpen = mfc.authenticateSectorWithKeyA(i, defauleKey);
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(i, companyKey);
+ }
+ if (isOpen) {
+ //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+ int bCount = mfc.getBlockCountInSector(i);
+ //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+ int bIndex = mfc.sectorToBlock(i);
+ //String data1 = "";
+ for (int j = 0; j < bCount; j++) {
+ //璇诲彇鏁版嵁
+ byte[] data = null;
+ try {
+ data = mfc.readBlock(bIndex);
+ bIndex++;
+ list.add(data);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- if (isOpen) {
- //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
- int bCount = mfc.getBlockCountInSector(i);
- //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
- int bIndex = mfc.sectorToBlock(i);
- //String data1 = "";
- for (int j = 0; j < bCount; j++) {
- //璇诲彇鏁版嵁
- byte[] data = null;
- try {
- data = mfc.readBlock(bIndex);
- bIndex++;
- list.add(data);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- flag = true;
- }
- map.put(i + "", list);
}
- if (flag) {
- callback.callBack(map);
- } else {
- callback.error(MyCommon.ERROR);
- }
- } catch (IOException e) {
- callback.error(MyCommon.ERROR_MOVE);
- e.printStackTrace();
- } catch (Exception e) {
- callback.error(MyCommon.ERROR);
- e.printStackTrace();
- } finally {
+ flag = true;
+ }
+ map.put(i + "", list);
+ }
+ if (flag) {
+ callback.callBack(map);
+ } else {
+ callback.error(MyCommon.ERROR);
+ }
+ } catch (IOException e) {
+ callback.error(MyCommon.ERROR_MOVE);
+ e.printStackTrace();
+ } catch (Exception e) {
+ callback.error(MyCommon.ERROR);
+ e.printStackTrace();
+ } finally {
+ try {
+ mfc.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 鑾峰彇1鎵囧尯淇℃伅
+ *
+ * @param callback
+ */
+ public void getOneSectorData(NFCCallListback callback) {
+
+
+ MifareClassic mfc = null;
+ try {
+ mfc = MifareClassic.get(tag);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (null != mfc) {
+ try {
+ //閾炬帴NFC
+ mfc.connect();
+ //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+ boolean flag = false;
+ List<byte[]> list = new ArrayList<>();
+ //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+ boolean isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
+ if (!isOpen) {
+ isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
+ }
+ if (isOpen) {
+ //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+ int bCount = mfc.getBlockCountInSector(1);
+ //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+ int bIndex = mfc.sectorToBlock(1);
+ //String data1 = "";
+ for (int j = 0; j < bCount; j++) {
+ //璇诲彇鏁版嵁
+ byte[] data = null;
try {
- mfc.close();
+ data = mfc.readBlock(bIndex);
+ bIndex++;
+ list.add(data);
} catch (Exception e) {
e.printStackTrace();
}
}
+ flag = true;
+ }
+ if (flag) {
+ callback.callBack(list);
+ } else {
+ callback.error(MyCommon.ERROR);
+ }
+ } catch (IOException e) {
+ callback.error(MyCommon.ERROR_MOVE);
+ e.printStackTrace();
+ } catch (Exception e) {
+ callback.error(MyCommon.ERROR);
+ e.printStackTrace();
+ } finally {
+
+ try {
+ mfc.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
- }).start();
+ }
}
+
/**
* 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅
@@ -263,7 +328,7 @@
break;
}
boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
- if (!isOpen){
+ if (!isOpen) {
isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
}
if (isOpen) {
@@ -293,7 +358,7 @@
/**
* 杩斿洖鐩戝惉绫�
*/
- public interface NFCCallListback {
+ public interface NFCCallMapback {
/**
* 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
*
@@ -305,6 +370,22 @@
void error(int code);
}
+ /**
+ * 杩斿洖鐩戝惉绫�
+ */
+ public interface NFCCallListback {
+ /**
+ * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
+ *
+ * @param data 鍓嶉潰浠h〃鎵囧尯 鍥涗釜鍧楃殑鏁版嵁鐢�#鍙烽殧寮�
+ */
+ void callBack(List<byte[]> data);
+
+
+ void error(int code);
+ }
+
+
public interface NFCCallByteback {
/**
* 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
--
Gitblit v1.8.0