package com.dayu.recharge.acitivity; 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.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; import com.dayu.recharge.socketBean.BalanceSelecteRequestBean; import com.dayu.recharge.tools.BcdUtil; import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.tools.NfcReadHelper; import com.dayu.recharge.tools.Utils; import com.dayu.recharge.utils.ArithUtil; import com.dayu.recharge.utils.CRC8; import com.dayu.recharge.utils.MornyUtil; import com.dayu.recharge.utils.SocketUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; import java.util.Arrays; import java.util.List; import java.util.Map; /** * Copyright (C), 2023, * Author: zuo * Date: 2023-11-10 19:52 * Description: 读卡界面 */ public class ReadCardAcitivy extends BaseNfcActivity { private static final int USER_CRAD = 1; private static final int MANAGE_CRAD = 2; private static final int ERROR = -1; UserCard userCard; UserCardBean waterCard; RechargeBean rechargeBean; // 农户注册编号 ActivityRedCardBinding redCardBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); redCardBinding = ActivityRedCardBinding.inflate(LayoutInflater.from(this)); setContentView(redCardBinding.getRoot()); } private void setData(String statu) { String initCode = WSHelper.getInstance(this).get("initCode", ""); if (TextUtils.isEmpty(initCode)) { ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址"); return; } // redCardBinding.redVillageNum.setText("设备序列号:" + initS.getANo() + ""); redCardBinding.redName.setText("用 户 名:" + rechargeBean.getUserName()); redCardBinding.redRemainderMorny.setText("剩余金额:" + rechargeBean.getBalance() + "" + "元"); redCardBinding.redStatu.setText("状 态:" + statu); } @Override public void onNewIntent(Intent intent) { startAnim(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { readAllData(intent); } } /** * 读取全部数据 */ private void readAllData(Intent intent) { NfcReadHelper.getInstence(intent) .getAllData(new NfcReadHelper.NFCCallListback() { @Override public void callBack(Map> data) { Message message = new Message(); //获取1扇区数据 List oneSector = data.get("1"); if (oneSector != null && oneSector.size() > 0) { byte cardType = oneSector.get(0)[0]; String cardTypeStr = HexUtil.byteToHex(cardType); // switch (cardTypeStr){ // case // } userCard = UserCard.getBean(oneSector); message.what = USER_CRAD; } else { message.what = ERROR; } handler.sendMessage(message); } @Override public void error() { Message message = new Message(); message.what = ERROR; handler.sendMessage(message); } }); } Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case USER_CRAD: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.VISIBLE); redCardBinding.readSysLL.setVisibility(View.GONE); redCardBinding.readCleanLL.setVisibility(View.GONE); redCardBinding.readInitLL.setVisibility(View.GONE); // selectBalance(newUserCard.getPeasantCode()); break; case MANAGE_CRAD: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.GONE); redCardBinding.readSysLL.setVisibility(View.VISIBLE); redCardBinding.readCleanLL.setVisibility(View.GONE); redCardBinding.readInitLL.setVisibility(View.GONE); stopAnim(); break; case 3: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.GONE); redCardBinding.readSysLL.setVisibility(View.GONE); redCardBinding.readCleanLL.setVisibility(View.VISIBLE); redCardBinding.readInitLL.setVisibility(View.GONE); stopAnim(); break; case 4: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.GONE); redCardBinding.readSysLL.setVisibility(View.GONE); redCardBinding.readCleanLL.setVisibility(View.GONE); redCardBinding.readInitLL.setVisibility(View.VISIBLE); stopAnim(); break; case 5: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.GONE); redCardBinding.readSysLL.setVisibility(View.GONE); redCardBinding.readCleanLL.setVisibility(View.GONE); redCardBinding.readInitLL.setVisibility(View.VISIBLE); redCardBinding.readInitLL.setText("当前为行政区域卡"); stopAnim(); break; case 6: redCardBinding.readImgLL.setVisibility(View.GONE); redCardBinding.readUserLL.setVisibility(View.GONE); redCardBinding.readSysLL.setVisibility(View.GONE); redCardBinding.readCleanLL.setVisibility(View.GONE); redCardBinding.readInitLL.setVisibility(View.VISIBLE); redCardBinding.readInitLL.setText("当前为设备序号卡"); stopAnim(); break; default: ToastUtil.show(ReadCardAcitivy.this, "卡片未注册"); stopAnim(); } return false; } }); void startAnim() { redCardBinding.avi.setVisibility(View.VISIBLE); redCardBinding.avi.show(); // or avi.smoothToShow(); } void stopAnim() { redCardBinding.avi.hide(); // or avi.smoothToHide(); } /** * @param initPeasantCode 农户注册编号 */ private void selectBalance(String initPeasantCode) { 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() { @Override public void onSocketResponse(SocketData readData) { if (CRC8.isCRC8(readData.getOriginDataBytes())) { StringBuffer stateText = null; try { stateText = new StringBuffer(); // stateText.append("状 态:"); String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s if ("00".equals(state)) { stateText.append("启用"); } else if ("01".equals(state)) { stateText.append("禁用"); } else if ("02".equals(state)) { stateText.append("隶属信息不符"); } else if ("03".equals(state)) { stateText.append("无此卡信息"); } 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)); rechargeBean = new RechargeBean(); rechargeBean.setDate(System.currentTimeMillis()); rechargeBean.setUserName(name); rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + ""); // rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + "")); setData(stateText.toString()); stopAnim(); } catch (Exception e) { e.printStackTrace(); } } else { //校验CRC错误 ToastUtil.show(ReadCardAcitivy.this, "开卡报文校验CRC错误"); } stopAnim(); } @Override public void onSocketError(int code, String msg) { ToastUtil.show(ReadCardAcitivy.this, msg); } }); } }