From 5b602b536c5be89b2cbfd211025236fb41ba2fa3 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 18 十二月 2023 17:46:00 +0800
Subject: [PATCH] 充值记录分页加载 补卡用户列表分页加载 通信模块添加日志方便分析长时间链接后不能通讯问题

---
 app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java |   96 ++++++++++++++++++++++++-----------------------
 1 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
index 449ebe7..120c3eb 100644
--- a/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
+++ b/app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
@@ -5,6 +5,7 @@
 import android.nfc.Tag;
 import android.nfc.tech.MifareClassic;
 import android.util.Base64;
+import android.util.Log;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -24,16 +25,15 @@
  * email 1058083107@qq.com
  * description
  */
-public class NFCWriteHelper extends BaseNFCHelper{
+public class NFCWriteHelper extends BaseNFCHelper {
 
     private Tag tag;
-    private NFCWriteHelper.NFCCallback callback;
+
     private static NFCWriteHelper helper;
-    private static int PASSWORD_LENTH = 6;
+    private static int PASSWORD_LENTH = 12;
 
     public NFCWriteHelper(Intent intent) {
         this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
-
     }
 
     /**
@@ -58,7 +58,7 @@
     public NFCWriteHelper setReadPassword(String str) {
         if (null != str && (str.length() <= PASSWORD_LENTH)) {
             for (int i = 0; i < str.length(); i++) {
-                bytes[i] = (byte) str.charAt(i);
+                defauleKey[i] = (byte) str.charAt(i);
             }
         }
         return helper;
@@ -67,12 +67,15 @@
     /**
      * 鍐欏崱
      *
-     * @param str      涔﹀啓鍐呭锛�16涓瓧鑺�
-     * @param a        涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
-     * @param b        涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
-     * @param callback 杩斿洖鐩戝惉
+     * @param str 涔﹀啓鍐呭锛�16涓瓧鑺�
+     * @param a   涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
+     * @param b   涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
+     * @param
      */
-    public void writeData(byte[] str, int a, int b, NFCWriteHelper.NFCCallback callback) {
+    public boolean writeData(byte[] str, int a, int b) {
+        Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
+        //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
+//        changePasword(a);
         if (str.length <= 16) {
             try {
                 MifareClassic mfc = MifareClassic.get(tag);
@@ -84,29 +87,29 @@
                         int count = mfc.getSectorCount();
                         //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉�
                         if (a > count - 1 || a < 0) {
-                            callback.isSusses(false);
-                            return;
+                            return false;
                         }
                         //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
                         int bCount = mfc.getBlockCountInSector(a);
                         //濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑�
                         if (b > bCount - 1 || b < 0) {
-                            callback.isSusses(false);
-                            return;
+                            return false;
                         }
                         //楠岃瘉鎵囧尯瀵嗙爜
-                        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);
                             //鍐欏崱
                             mfc.writeBlock(bIndex + b, str);
-                            callback.isSusses(true);
-                            return;
+                            return true;
                         }
-                        callback.isSusses(false);
+                        return false;
                     } catch (Exception e) {
                         e.printStackTrace();
-                        callback.isSusses(false);
+                        return false;
                     } finally {
                         try {
                             mfc.close();
@@ -117,58 +120,56 @@
                 }
             } catch (Exception e) {
                 e.printStackTrace();
+                return false;
             }
         }
+        return false;
     }
 
 
     /**
      * 淇敼瀵嗙爜
      *
-     * @param password 涔﹀啓瀵嗙爜锛�16涓瓧鑺�
      * @param a        涔﹀啓鐨勬墖鍖�
-     * @param callback 杩斿洖鐩戝惉
+     *                 //     * @param callback 杩斿洖鐩戝惉
      */
-    public void changePasword(String password, int a, final NFCWriteHelper.NFCCallback callback) {
+    public boolean changePasword(int a) {
         MifareClassic mfc = MifareClassic.get(tag);
         byte[] data = new byte[16];
         if (null != mfc) {
             try {
                 mfc.connect();
-                if (password.length() != PASSWORD_LENTH) {
-                    callback.isSusses(false);
-                    return;
-                }
+
                 int count = mfc.getSectorCount();
-                if (a > count - 1 || a < 0) {
-                    callback.isSusses(false);
-                    return;
-                }
-                //灏嗗瘑鐮佽浆鎹负keyA
-                for (int i = 0; i < password.length(); i++) {
-                    data[i] = (byte) password.charAt(i);
-                }
-                //灏嗗瘑鐮佽浆鎹负KeyB
-                for (int i = 0; i < password.length(); i++) {
-                    data[i + password.length() + 4] = (byte) password.charAt(i);
-                }
-                //杈撳叆鎺у埗浣�
-                data[password.length()] = (byte) 0xff;
-                data[password.length() + 1] = (byte) 0x07;
-                data[password.length() + 2] = (byte) 0x80;
-                data[password.length() + 3] = (byte) 0x69;
-                //楠岃瘉瀵嗙爜
-                boolean isOpen = mfc.authenticateSectorWithKeyA(a, bytes);
+                boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+
+                //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜
                 if (isOpen) {
+                    //灏嗗瘑鐮佽浆鎹负keyA
+                    byte[] dataA = HexUtil.hexToByteArray(companyKeyA);
+                    for (int i = 0; i < dataA.length; i++) {
+                        data[i] = dataA[i];
+                    }
+                    //杈撳叆鎺у埗浣�
+                    data[6] = (byte) 0xff;
+                    data[7] = (byte) 0x07;
+                    data[8] = (byte) 0x80;
+                    data[9] = (byte) 0x69;
+                    byte[] dataB = HexUtil.hexToByteArray(companyKeyB);
+                    //灏嗗瘑鐮佽浆鎹负KeyB
+                    for (int i = 0; i < dataB.length; i++) {
+                        data[i + 10] = dataB[i];
+                    }
                     int bIndex = mfc.sectorToBlock(a);
                     int bCount = mfc.getBlockCountInSector(a);
                     //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡
                     mfc.writeBlock(bIndex + bCount - 1, data);
                 }
-                callback.isSusses(true);
+                return true;
             } catch (Exception e) {
                 e.printStackTrace();
-                callback.isSusses(false);
+                return false;
+//                callback.isSusses(false);
             } finally {
                 try {
                     mfc.close();
@@ -177,6 +178,7 @@
                 }
             }
         }
+        return false;
     }
 
     /**

--
Gitblit v1.8.0