From ebc06a3ae3a42bd6ac1359a59c55d5e6f1a0e2f0 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期二, 26 三月 2024 16:18:08 +0800 Subject: [PATCH] 优化通讯 写卡界面添加二次确认 优化用户写卡逻辑,提高写卡速度。 --- app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java | 232 ++++++++++++++++++++++++---------------------------------- 1 files changed, 96 insertions(+), 136 deletions(-) diff --git a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java index cdb7633..5371a40 100644 --- a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java +++ b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java @@ -3,19 +3,14 @@ import android.content.Intent; import android.nfc.NfcAdapter; import android.os.Bundle; -import android.os.Handler; -import android.os.Message; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; - import com.dayu.recharge.card.ConfigurationPowerCard; import com.dayu.recharge.card.DomainCard; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityRedCardBinding; -import com.dayu.recharge.dbBean.RechargeBean; -import com.dayu.recharge.dbBean.UserCardBean; import com.dayu.recharge.net.SocketCallBack; import com.dayu.recharge.net.SocketData; import com.dayu.recharge.net.SocketNet; @@ -23,17 +18,18 @@ import com.dayu.recharge.tools.BcdUtil; import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.tools.NfcReadHelper; +import com.dayu.recharge.tools.WriteCardUtils; import com.dayu.recharge.utils.CRC8; +import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.MornyUtil; import com.dayu.recharge.utils.MyCommon; import com.dayu.recharge.utils.SocketUtil; -import com.dayu.recharge.utils.ToastUtil; -import com.dayu.recharge.utils.WSHelper; +import com.dayu.recharge.utils.TipUtil; +import com.dayu.recharge.view.ProgressDialog; import java.util.Arrays; import java.util.Calendar; import java.util.List; -import java.util.Map; /** * Copyright (C), 2023, @@ -43,22 +39,10 @@ */ public class ReadCardAcitivy extends BaseNfcActivity { - private static final int USER_CRAD = 1; - private static final int MANAGE_CRAD = 2; - private static final int CLEAN_CARD = 3; - private static final int REGISTERED_CARD = 4; - private static final int CLEAN_ALL_USER = 5; - private static final int DOMAIN_CARD = 6; - private static final int TEST_CARD = 7; - - private static final int CONFIGURATION_CARD = 8; - - private static final int CONFIGURATION_POWER_CARD = 9; - private static final int PASS_WORD_CRAD = 10; - - private static final int ERROR = -1; volatile UserCard userCard; ActivityRedCardBinding redCardBinding; + + Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,8 +57,9 @@ redCardBinding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName); redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(blance) + "鍏�"); redCardBinding.redStatu.setText("鍗$姸鎬侊細" + statu); + redCardBinding.redAddressCode.setText("鍦板潃鐮侊細" + userCard.getAddressCode()); if (userCard != null) { - redCardBinding.redInitCode.setText("鐢ㄦ埛娉ㄥ唽缂栧彿锛�" + userCard.getInitPeasantCode()); + redCardBinding.redInitCode.setText(userCard.getInitPeasantCode()); Calendar calendar = userCard.getRechargeDate(); if (calendar != null) { int year = calendar.get(Calendar.YEAR); @@ -95,143 +80,107 @@ @Override public void onNewIntent(Intent intent) { - startAnim(); + this.intent = intent; + ProgressDialog.show(this); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { readAllData(intent); } + super.onNewIntent(intent); } /** * 璇诲彇鍏ㄩ儴鏁版嵁 */ - private void readAllData(Intent intent) { - NfcReadHelper.getInstence(intent) - .getAllData(new NfcReadHelper.NFCCallListback() { + + public void readAllData(Intent intent) { + NfcReadHelper.getInstence(intent, this) + .getOneSectorData(new NfcReadHelper.NFCCallListback() { @Override - public void callBack(Map<String, List<byte[]>> data) { - Message message = new Message(); + public void callBack(List<byte[]> data) { //鑾峰彇1鎵囧尯鏁版嵁 - List<byte[]> oneSector = data.get("1"); - if (oneSector != null && oneSector.size() > 0) { - byte cardType = oneSector.get(0)[0]; + if (data != null && data.size() > 0) { + byte cardType = data.get(0)[0]; String cardTypeStr = HexUtil.byteToHex(cardType); switch (cardTypeStr) { case MyCommon.USER_CARD_TYPE_1: case MyCommon.USER_CARD_TYPE_2: case MyCommon.USER_CARD_TYPE_3: - userCard = UserCard.getBean(oneSector); - message.what = USER_CRAD; + userCard = UserCard.getBean(data); + selectBalance(userCard.getInitPeasantCode()); break; case MyCommon.MANAGE_CRAD: - message.what = MANAGE_CRAD; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱"); + stopAnim(); break; case MyCommon.CLEAN_CARD_TYPE: - message.what = CLEAN_CARD; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱"); + stopAnim(); break; case MyCommon.REGISTERED_CARD_TYPE: - message.what = REGISTERED_CARD; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱"); + stopAnim(); + break; case MyCommon.CLEAN_ALL_USER_CARD_TYPE: - message.what = CLEAN_ALL_USER; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱"); + stopAnim(); break; case MyCommon.DOMAIN_CARD_TYPE: - message.what = DOMAIN_CARD; - message.obj = oneSector; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱"); + DomainCard domainCard = DomainCard.toBean(data); + redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort()); + stopAnim(); break; case MyCommon.TEST_CARD_TYPE: - message.what = TEST_CARD; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱"); + stopAnim(); break; case MyCommon.CONFIGURATION_CARD_TYPE: - message.what = CONFIGURATION_CARD; + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱"); + stopAnim(); break; case MyCommon.CONFIGURATION_POWER_CARD_TYPE: - message.what = CONFIGURATION_POWER_CARD; - message.obj = oneSector.get(0); + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�"); + ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0)); + redCardBinding.readCardDataTV.setText(powerCard.getPower()); + stopAnim(); + break; + default: + TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆"); + stopAnim(); break; } } else { - message.what = ERROR; + TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆"); + stopAnim(); } - handler.sendMessage(message); + } - @Override - public void error() { - Message message = new Message(); - message.what = ERROR; - handler.sendMessage(message); + public void error(int code) { + switch (code) { + case MyCommon.ERROR_MOVE: + stopAnim(); + TipUtil.show("杩炴帴涓柇锛岃閲嶆柊璐村悎鍗$墖"); + break; + default: + stopAnim(); + TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒"); + } } }); } - Handler handler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - switch (msg.what) { - case USER_CRAD: - selectBalance(userCard.getInitPeasantCode()); - break; - case MANAGE_CRAD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱"); - stopAnim(); - break; - case CLEAN_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱"); - stopAnim(); - break; - case REGISTERED_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱"); - stopAnim(); - break; - case CLEAN_ALL_USER: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱"); - stopAnim(); - break; - case DOMAIN_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱"); - List<byte[]> data = (List<byte[]>) msg.obj; - DomainCard domainCard = DomainCard.toBean(data); - redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort()); - stopAnim(); - break; - case TEST_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱"); - stopAnim(); - break; - case CONFIGURATION_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱"); - stopAnim(); - break; - case CONFIGURATION_POWER_CARD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�"); - byte[] powerData = (byte[]) msg.obj; - ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(powerData); - redCardBinding.readCardDataTV.setText(powerCard.getPower()); - stopAnim(); - break; - case PASS_WORD_CRAD: - viweGone(false); - redCardBinding.readCardTypeTV.setText("褰撳墠涓哄瘑鐮佸崱"); - stopAnim(); - break; - default: - ToastUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆"); - stopAnim(); - break; - } - return false; - } - }); private void viweGone(boolean isUSerCard) { redCardBinding.readImgLL.setVisibility(View.GONE); @@ -245,14 +194,9 @@ } - void startAnim() { - redCardBinding.avi.setVisibility(View.VISIBLE); - redCardBinding.avi.show(); - // or avi.smoothToShow(); - } void stopAnim() { - redCardBinding.avi.hide(); + ProgressDialog.dismiss(); // or avi.smoothToHide(); } @@ -260,14 +204,18 @@ * @param initPeasantCode 鍐滄埛娉ㄥ唽缂栧彿 */ private void selectBalance(String initPeasantCode) { + String initCode = DeviceNumberUtils.getDeviceNumber(); + if (TextUtils.isEmpty(initCode)) { + TipUtil.show("璁惧鏈敞鍐�"); + return; + } BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean(); requestBean.setAFN("94"); requestBean.setControl("01"); - String initCode = WSHelper.getInstance(this).get("initCode", ""); requestBean.setInitCode(initCode); requestBean.setInitPeasantCode(initPeasantCode); requestBean.setXuLie(SocketUtil.getXuLie(this)); - SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() { + SocketNet.getInstance().sendTestMessage(requestBean.pack(), "94",new SocketCallBack() { @Override public void onSocketResponse(SocketData readData) { if (CRC8.isCRC8(readData.getOriginDataBytes())) { @@ -276,11 +224,30 @@ try { stateText = new StringBuffer(); -// stateText.append("鐘� 鎬侊細"); + int balance = 0; + String name = null; + try { + //閲戦 + byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); + balance = SocketUtil.get16to10LowHigh(blanceByte); + //濮撳悕 + byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); + name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); + } catch (Exception e) { + e.printStackTrace(); + } + String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s if ("00".equals(state)) { + userCard.setBalance(balance); + userCard.setState("00"); + + WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this); stateText.append("鍚敤"); } else if ("01".equals(state)) { + userCard.setBalance(balance); + userCard.setState("01"); + WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this); stateText.append("绂佺敤"); } else if ("02".equals(state)) { stateText.append("闅跺睘淇℃伅涓嶇"); @@ -289,13 +256,6 @@ } else if ("04".equals(state)) { stateText.append("鍏跺畠"); } - //閲戦 - byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); - int balance = SocketUtil.get16to10LowHigh(blanceByte); - //濮撳悕 - byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); - String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); - setUserData(name, balance, stateText.toString()); stopAnim(); @@ -304,17 +264,17 @@ } } else { //鏍¢獙CRC閿欒 - ToastUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒"); + TipUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒"); } stopAnim(); } @Override public void onSocketError(int code, String msg) { - ToastUtil.show(ReadCardAcitivy.this, msg); + stopAnim(); + TipUtil.show(ReadCardAcitivy.this, msg); } }); - } } -- Gitblit v1.8.0