From 8226f232c39359b36aff8a9b0453c2fb48ee4372 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期一, 18 十二月 2023 11:48:53 +0800 Subject: [PATCH] 用户列表分页加载 --- app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java | 321 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 250 insertions(+), 71 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 0ee6259..650415d 100644 --- a/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java +++ b/app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java @@ -4,6 +4,10 @@ import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.tech.MifareClassic; +import android.util.Log; + +import com.dayu.recharge.card.UserCard; +import com.dayu.recharge.utils.MyCommon; import java.io.IOException; import java.util.ArrayList; @@ -44,86 +48,240 @@ } /** - * 璁剧疆NFC鍗$殑瀵嗙爜 + * 鑾峰彇鐢ㄦ埛鍗′俊鎭� * - * @param str * @return */ -// public NfcReadHelper setPassword(String str) { -// -// if (null != str && (str.length() <= 6)) { -// for (int i = 0; i < str.length(); i++) { -// bytes[i] = (byte) str.charAt(i); -// } -// } -// return helper; -// } + public UserCard getUserCardData() { + UserCard userCard = null; + 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; + List<byte[]> list = new ArrayList<>(); + //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級 + boolean isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey); + if (!isOpen) { + isOpen = mfc.authenticateSectorWithKeyA(1, companyKey); + } + 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 { + data = mfc.readBlock(bIndex); + bIndex++; + list.add(data); + } catch (Exception e) { + e.printStackTrace(); + } + } + flag = true; + } + + if (flag) { + userCard = UserCard.getBean(list); + return userCard; + } + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + mfc.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return null; + } + + public String getCradType() { + + MifareClassic mfc = MifareClassic.get(tag); + if (null != mfc) { + try { + mfc.connect(); + boolean isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey); + if (!isOpen) { + isOpen = mfc.authenticateSectorWithKeyA(1, companyKey); + } + if (isOpen) { + int bIndex = mfc.sectorToBlock(1); + byte[] data = mfc.readBlock(bIndex + 0); + if (data != null && data.length > 0) { + String hex = HexUtil.byteToHex(data[0]); + Log.i("NFCWreatActivity", "hex===" + hex); + return hex; + } + + } else { + Log.i("NFCWreatActivity", "isOpen===" + isOpen); + return "-1"; + } + } catch (IOException e) { + return "-1"; + } finally { + try { + mfc.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return ""; + } /** * 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅 * * @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, bytes); - 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; + 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(); } - map.put(i + "", list); } - if (flag) { - callback.callBack(map); - } else { - callback.error(); - } - } catch (Exception e) { - callback.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(); - } catch (IOException e) { + 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鍗$殑鐗瑰畾鎵囧尯淇℃伅 @@ -143,12 +301,12 @@ mfc.connect(); int count = mfc.getSectorCount(); if (a < 0 || a > count - 1) { - callback.error(); + callback.error(MyCommon.ERROR); return; } int bCount = mfc.getBlockCountInSector(a); if (b < 0 || b > bCount - 1) { - callback.error(); + callback.error(MyCommon.ERROR); return; } @@ -168,17 +326,22 @@ typeS = "TYPE_UNKNOWN"; break; } - boolean isOpen = mfc.authenticateSectorWithKeyA(a, bytes); + boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey); + if (!isOpen) { + isOpen = mfc.authenticateSectorWithKeyA(a, companyKey); + } if (isOpen) { int bIndex = mfc.sectorToBlock(a); byte[] data = mfc.readBlock(bIndex + b); callback.callBack(data); } else { - callback.error(); + callback.error(MyCommon.ERROR); } - } catch (Exception e) { - callback.error(); + } catch (IOException e) { + callback.error(MyCommon.ERROR_MOVE); e.printStackTrace(); + } catch (Exception e) { + callback.error(MyCommon.ERROR); } finally { try { mfc.close(); @@ -194,7 +357,7 @@ /** * 杩斿洖鐩戝惉绫� */ - public interface NFCCallListback { + public interface NFCCallMapback { /** * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅 * @@ -203,8 +366,24 @@ void callBack(Map<String, List<byte[]>> data); - void error(); + void error(int code); } + + /** + * 杩斿洖鐩戝惉绫� + */ + public interface NFCCallListback { + /** + * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅 + * + * @param data 鍓嶉潰浠h〃鎵囧尯 鍥涗釜鍧楃殑鏁版嵁鐢�#鍙烽殧寮� + */ + void callBack(List<byte[]> data); + + + void error(int code); + } + public interface NFCCallByteback { /** @@ -215,7 +394,7 @@ void callBack(byte[] data); - void error(); + void error(int code); } } -- Gitblit v1.8.0