| | |
| | | import android.content.Intent; |
| | | import android.nfc.NfcAdapter; |
| | | import android.os.Bundle; |
| | | import android.os.Handler; |
| | | import android.os.Message; |
| | | import android.view.LayoutInflater; |
| | | import android.view.View; |
| | | |
| | | |
| | | import com.dayu.recharge.card.ConfigurationPowerCard; |
| | | import com.dayu.recharge.card.DomainCard; |
| | |
| | | import com.dayu.recharge.utils.MyCommon; |
| | | import com.dayu.recharge.utils.SocketUtil; |
| | | import com.dayu.recharge.utils.TipUtil; |
| | | import com.dayu.recharge.view.ProgressDialog; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Calendar; |
| | |
| | | redCardBinding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(blance) + "元"); |
| | | redCardBinding.redStatu.setText("卡状态:" + statu); |
| | | 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); |
| | |
| | | |
| | | @Override |
| | | public void onNewIntent(Intent intent) { |
| | | super.onNewIntent(intent); |
| | | this.intent = intent; |
| | | startAnim(); |
| | | ProgressDialog.show(this); |
| | | if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { |
| | | readAllData(intent); |
| | | } |
| | | super.onNewIntent(intent); |
| | | } |
| | | |
| | | /** |
| | | * 读取全部数据 |
| | | */ |
| | | |
| | | public void readAllData(Intent intent) { |
| | | public void readAllData(Intent intent) { |
| | | NfcReadHelper.getInstence(intent) |
| | | .getAllData(new NfcReadHelper.NFCCallListback() { |
| | | .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 = MyCommon.ERROR; |
| | | TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); |
| | | stopAnim(); |
| | | } |
| | | handler.sendMessage(message); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void error(int code) { |
| | | Message message = new Message(); |
| | | message.what = code; |
| | | handler.sendMessage(message); |
| | | 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; |
| | | case MyCommon.ERROR_MOVE: |
| | | stopAnim(); |
| | | TipUtil.show("连接中断,请重新贴合卡片"); |
| | | break; |
| | | default: |
| | | TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); |
| | | stopAnim(); |
| | | break; |
| | | } |
| | | return false; |
| | | } |
| | | }); |
| | | |
| | | private void viweGone(boolean isUSerCard) { |
| | | redCardBinding.readImgLL.setVisibility(View.GONE); |
| | |
| | | |
| | | } |
| | | |
| | | void startAnim() { |
| | | redCardBinding.avi.setVisibility(View.VISIBLE); |
| | | redCardBinding.avi.show(); |
| | | // or avi.smoothToShow(); |
| | | } |
| | | |
| | | void stopAnim() { |
| | | redCardBinding.avi.hide(); |
| | | ProgressDialog.dismiss(); |
| | | // or avi.smoothToHide(); |
| | | } |
| | | |
| | |
| | | |
| | | try { |
| | | stateText = new StringBuffer(); |
| | | //金额 |
| | | 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()); |
| | | 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); |
| | | stateText.append("启用"); |
| | | } else if ("01".equals(state)) { |
| | |
| | | stateText.append("其它"); |
| | | } |
| | | |
| | | |
| | | setUserData(name, balance, stateText.toString()); |
| | | stopAnim(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |