app/build.gradle
@@ -16,8 +16,8 @@ applicationId "com.dayu.recharge" minSdk 23 targetSdk 26 versionCode 22 versionName "2.2" versionCode 24 versionName "2.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // ndk { baselibrary/src/main/java/com/dayu/baselibrary/tools/HexUtil.java
@@ -58,6 +58,29 @@ return ((data & 0xF0) >> 4) * 10 + ((data & 0x0F)); } public static byte[] getIntToBCD(int number) { // 获取整数的字符串表示形式 String numberStr = Integer.toString(number); // 创建一个字节数组以存储BCD表示 int len = numberStr.length(); byte[] bcd = new byte[(len + 1) / 2]; int j = 0; // 如果数字的长度是奇数,需要在前面添加一个0 if (len % 2 != 0) { numberStr = "0" + numberStr; // 先添加前导零 len++; } // 将每一对数字转换为一个字节 for (int i = 0; i < len; i += 2) { bcd[j++] = (byte) (((numberStr.charAt(i) - '0') << 4) | (numberStr.charAt(i + 1) - '0')); } return bcd; } /** * short10进制转16进制 低位在前高位在后 * henanlibrary/src/main/java/com/dayu/henanlibrary/activity/NFCWreatActivity.java
@@ -204,9 +204,13 @@ cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard"); binding.cardData.setText("制作删除全部用户卡"); } if (this.getIntent().hasExtra("domainCard")) { domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard"); binding.cardData.setText("制作设置域名卡"); if (this.getIntent().hasExtra("domainCard_xinxiang")) { domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard_xinxiang"); binding.cardData.setText("制作设置新乡域名卡"); } if (this.getIntent().hasExtra("domainCard_luyi")) { domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard_luyi"); binding.cardData.setText("制作设置新乡域名卡"); } if (this.getIntent().hasExtra("testCard")) { testCard = (TestCard) this.getIntent().getSerializableExtra("testCard"); @@ -558,19 +562,19 @@ * 设置域名卡 * * @param intent * @param domainCard * @param domainXinXiangCard */ private void setDomainCard(Intent intent, DomainCard domainCard) { private void setDomainCard(Intent intent, DomainCard domainXinXiangCard) { try { domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getZeroByte(), 1, 0); domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainXinXiangCard.getZeroByte(), 1, 0); if (!domainCrdFlag) { return; } domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getOneByte(), 1, 1); domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainXinXiangCard.getOneByte(), 1, 1); if (!domainCrdFlag) { return; } domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getTwoByte(), 1, 2); domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainXinXiangCard.getTwoByte(), 1, 2); } catch (Exception e) { domainCrdFlag = false; throw new RuntimeException(e); henanlibrary/src/main/java/com/dayu/henanlibrary/activity/PassWordActivity.java
@@ -32,8 +32,8 @@ if (!TextUtils.isEmpty(pswBinding.pswNew.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswOld.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswNewAgin.getText().toString())) { if ((passWordBean != null && (passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()))) || (WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()).equals("8af357996269a1b52b182a839150097d"))&& passWordBean == null)) { && (passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(pswBinding.pswOld.getText().toString())))) || (WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()).equals("e10adc3949ba59abbe56e057f20f883e") && passWordBean == null)) { if (passWordBean == null) { passWordBean = new PassWordBean(); } henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java
@@ -131,9 +131,20 @@ break; case CardCommon.DOMAIN_CARD_TYPE: viweGone(false); redCardBinding.readCardTypeTV.setText("当前为设置域名卡"); DomainCard domainCard = DomainCard.toBean(data); redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort()); DomainCard domainXinXiangCard = DomainCard.toBean(data); if(domainXinXiangCard.getType()==0){ redCardBinding.readCardTypeTV.setText("当前为新乡域名卡"); }else { redCardBinding.readCardTypeTV.setText("当前为鹿邑域名卡"); } StringBuilder builder = new StringBuilder(); if (domainXinXiangCard.getType() == 0) { builder.append("序号:" + domainXinXiangCard.getDomainNumber() + "\n"); } builder.append("域名:" + domainXinXiangCard.getDomainName()); builder.append("\n" + "端口号:" + domainXinXiangCard.getPort()); redCardBinding.readCardDataTV.setText(builder.toString()); stopAnim(); break; case CardCommon.TEST_CARD_TYPE: henanlibrary/src/main/java/com/dayu/henanlibrary/activity/SysActivity.java
@@ -9,13 +9,12 @@ import com.dayu.henanlibrary.card.CleanUserCard; import com.dayu.henanlibrary.card.ConfigurationPowerCard; import com.dayu.henanlibrary.card.ConfigureDeviceRegistrationCrad; import com.dayu.henanlibrary.card.DomainCard; import com.dayu.henanlibrary.card.ManageCard; import com.dayu.henanlibrary.card.RegisteredCard; import com.dayu.henanlibrary.card.TestCard; import com.dayu.henanlibrary.databinding.ActivityAdminHnBinding; import com.dayu.henanlibrary.dbBean.DomainBean; import com.dayu.henanlibrary.dbBean.PowerBean; import com.dayu.henanlibrary.view.DomaindDialog; /** * Copyright (C), 2023, @@ -69,20 +68,8 @@ }); // 设置域名卡 adminBinding.adminDomain.setOnClickListener(v -> { Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class); DomainBean domainBean = baseDao.domainPortDao().findFirst(); DomainCard domainCard = new DomainCard(); if (domainBean != null) { domainCard.setDomainNumber(domainBean.getDomainNumber()); domainCard.setDomainName(domainBean.getDomain()); domainCard.setPort(domainBean.getPort()); } else { domainCard.setDomainNumber("1"); domainCard.setDomainName("newreceive.hnsjgg.com"); domainCard.setPort(9999); } intent.putExtra("domainCard", domainCard); startActivity(intent); DomaindDialog domaindDialog=new DomaindDialog(SysActivity.this); domaindDialog.show(); }); adminBinding.adminTest.setOnClickListener(v -> { Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class); henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java
@@ -1,5 +1,7 @@ package com.dayu.henanlibrary.card; import android.text.TextUtils; import com.dayu.baselibrary.tools.BcdUtil; import com.dayu.baselibrary.tools.HexUtil; import com.dayu.henanlibrary.utils.CardCommon; @@ -26,6 +28,16 @@ //端口号为5个字节,不足5位高位补0。端口号与域名之间用”,”隔开。端口号最后以”#”结束 public String domainName;//域名 public int port;//端口 public int type;//域名卡新乡C1后有01==0,鹿邑没有01==1 public int getType() { return type; } public void setType(int type) { this.type = type; } public String getDomainName() { return domainName; @@ -71,34 +83,80 @@ public static DomainCard toBean(List<byte[]> data) { try { DomainCard domainCard = new DomainCard(); DomainCard domainXinXiangCard = new DomainCard(); String domainNumber = BcdUtil.bcdToStr(data.get(0)[1]); domainCard.domainNumber = domainNumber; int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2])); byte[] domainData = new byte[domainLength + 7]; int index = 0; for (int i = 0; i < 3; i++) { int jIndex; if (i == 0) { jIndex = 3; } else { jIndex = 0; } for (int j = jIndex; j < 15; j++) { if (index < domainData.length) { domainData[index] = data.get(i)[j]; index++; if ("00".equals(domainNumber)||"01".equals(domainNumber)||"02".equals(domainNumber)){//假如序号小于等于2就认为是新乡的 domainXinXiangCard.setType(0); domainXinXiangCard.domainNumber = domainNumber; int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2])); byte[] domainData = new byte[domainLength + 7]; int index = 0; for (int i = 0; i < 3; i++) { int jIndex; if (i == 0) { jIndex = 3; } else { jIndex = 0; } for (int j = jIndex; j < 15; j++) { if (index < domainData.length) { domainData[index] = data.get(i)[j]; index++; } } } String domainStr = new String(domainData, StandardCharsets.US_ASCII); if (!TextUtils.isEmpty(domainStr)){ try { String[] parts = domainStr.split("#")[0].split(","); if (parts.length >= 2) { String domainName = parts[0]; String port = parts[1].replace("#", ""); domainXinXiangCard.setDomainName(domainName); domainXinXiangCard.setPort(Integer.valueOf(port)); } } catch (NumberFormatException e) { e.printStackTrace(); } } }else { domainXinXiangCard.setType(1); int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[1])); byte[] domainData = new byte[domainLength + 7]; int index = 0; for (int i = 0; i < 3; i++) { int jIndex; if (i == 0) { jIndex = 2; } else { jIndex = 0; } for (int j = jIndex; j < 15; j++) { if (index < domainData.length) { domainData[index] = data.get(i)[j]; index++; } } } String domainStr = new String(domainData, StandardCharsets.US_ASCII); if (!TextUtils.isEmpty(domainStr)){ try { String[] parts = domainStr.split("#")[0].split(","); if (parts.length >= 2) { String domainName = parts[0]; String port = parts[1].replace("#", ""); domainXinXiangCard.setDomainName(domainName); domainXinXiangCard.setPort(Integer.valueOf(port)); } } catch (NumberFormatException e) { e.printStackTrace(); } } } String domainStr = new String(domainData, StandardCharsets.US_ASCII); String domainName = domainStr.split(",")[0]; String port = domainStr.split(",")[1].replace("#", ""); domainCard.setDomainName(domainName); domainCard.setPort(Integer.valueOf(port)); return domainCard; return domainXinXiangCard; } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); @@ -114,24 +172,45 @@ public byte[] toByte() { byte[] data = new byte[16]; data[0] = HexUtil.hexToByte(cardType); if (domainNumber != null) { byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); data[1] = domainNumbers[0]; } domainLength = domainName.length(); data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); String portStr = String.valueOf(port); int lenght = portStr.length(); for (int i = 0; i < 5 - lenght; i++) { portStr = "0" + portStr; } String ascii = IDN.toASCII(domainName + "," + portStr + "#"); asciiByte = ascii.getBytes(); if (asciiByte.length < 12) { System.arraycopy(asciiByte, 0, data, 3, asciiByte.length); // 域名卡新乡C1后有01==0,鹿邑没有01==1 if (type == 0) { if (domainNumber != null) { byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); data[1] = domainNumbers[0]; } domainLength = domainName.length(); data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); String portStr = String.valueOf(port); int lenght = portStr.length(); for (int i = 0; i < 5 - lenght; i++) { portStr = "0" + portStr; } String ascii = IDN.toASCII(domainName + "," + portStr + "#"); asciiByte = ascii.getBytes(); if (asciiByte.length < 12) { System.arraycopy(asciiByte, 0, data, 3, asciiByte.length); } else { System.arraycopy(asciiByte, 0, data, 3, 12); } } else { System.arraycopy(asciiByte, 0, data, 3, 12); data[1] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); String portStr = String.valueOf(port); int lenght = portStr.length(); for (int i = 0; i < 5 - lenght; i++) { portStr = "0" + portStr; } String ascii = IDN.toASCII(domainName + "," + portStr + "#"); asciiByte = ascii.getBytes(); if (asciiByte.length < 13) { System.arraycopy(asciiByte, 0, data, 1, asciiByte.length); } else { System.arraycopy(asciiByte, 0, data, 1, 13); } } data[15] = getByteSum(data); return data; } @@ -145,13 +224,24 @@ public byte[] toBytes() { byte[] data = new byte[16]; if (asciiByte.length > 12) { if (asciiByte.length - 12 < 15) { System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12); } else { System.arraycopy(asciiByte, 12, data, 0, 15); if (type==0){ if (asciiByte.length > 12) { if (asciiByte.length - 12 < 15) { System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12); } else { System.arraycopy(asciiByte, 12, data, 0, 15); } } }else { if (asciiByte.length > 13) { if (asciiByte.length - 13 < 15) { System.arraycopy(asciiByte, 13, data, 0, asciiByte.length - 12); } else { System.arraycopy(asciiByte, 13, data, 0, 15); } } } data[15] = getByteSum(data); return data; } @@ -165,13 +255,24 @@ public class Two extends BaseCard { public byte[] toBytes() { byte[] data = new byte[16]; if (asciiByte.length > (12 + 15)) { if (asciiByte.length - (12 + 15) < 15) { System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15)); } else { System.arraycopy(asciiByte, 12, data, 0, 15); if (type==0){ if (asciiByte.length > (12 + 15)) { if (asciiByte.length - (12 + 15) < 15) { System.arraycopy(asciiByte, 12 + 15, data, 0, asciiByte.length - (12 + 15)); } else { System.arraycopy(asciiByte, 12 + 15, data, 0, 15); } } }else { if (asciiByte.length > (13 + 15)) { if (asciiByte.length - (13 + 15) < 15) { System.arraycopy(asciiByte, 13 + 15, data, 0, asciiByte.length - (12 + 15)); } else { System.arraycopy(asciiByte, 13 + 15, data, 0, 15); } } } data[15] = getByteSum(data); return data; } henanlibrary/src/main/java/com/dayu/henanlibrary/dbBean/DomainBean.java
@@ -3,6 +3,8 @@ import androidx.room.Entity; import androidx.room.PrimaryKey; import java.io.Serializable; /** * Created by Android Studio. * author: zuo @@ -11,7 +13,7 @@ * 备注: 域名和端口号相关 */ @Entity public class DomainBean { public class DomainBean implements Serializable { @PrimaryKey(autoGenerate = true) public long id; henanlibrary/src/main/java/com/dayu/henanlibrary/view/DomaindDialog.java
New file @@ -0,0 +1,108 @@ package com.dayu.henanlibrary.view; import static android.view.Gravity.CENTER; import android.app.Dialog; import android.content.Intent; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.RadioGroup; import android.widget.TextView; import com.dayu.baselibrary.utils.ToastUtil; import com.dayu.henanlibrary.R; import com.dayu.henanlibrary.activity.HNBaseActivity; import com.dayu.henanlibrary.activity.NFCWreatActivity; import com.dayu.henanlibrary.card.DomainCard; import com.dayu.henanlibrary.dbBean.DomainBean; /** * author: zuo * Date: 2024-06-07 * Time: 10:44 * 备注:选择域名卡类型 域名卡新乡C1后有01,鹿邑没有01,卡结构不同 */ public class DomaindDialog extends Dialog { HNBaseActivity mContext; boolean ischose = false; int type; public DomaindDialog(HNBaseActivity context) { super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog); mContext = context; initView(); } private void initView() { getWindow().setGravity(CENTER); setContentView(R.layout.domain_dialog); setCanceledOnTouchOutside(false); RadioGroup radioGroup = findViewById(R.id.radioLibrary); radioGroup.setOnCheckedChangeListener((group, checkedId) -> { ischose = true; // 当选中的RadioButton发生变化时调用 if (checkedId == R.id.xinxiang) { type = 0; } else if (checkedId == R.id.luyi) {// 处理选中Option 2的逻辑 type = 1; } }); TextView okBtn = findViewById(R.id.ok); okBtn.setOnClickListener(v -> { if (ischose) { Intent intent = new Intent(mContext, NFCWreatActivity.class); DomainBean domainBean = mContext.baseDao.domainPortDao().findFirst(); DomainCard domainCard = new DomainCard(); if (domainBean != null) { domainCard.setDomainNumber(domainBean.getDomainNumber()); domainCard.setDomainName(domainBean.getDomain()); domainCard.setPort(domainBean.getPort()); } else { ToastUtil.showLong("当前未设置域名信息,已使用河南省平台默认域名与端口号"); domainCard.setDomainNumber("1"); domainCard.setDomainName("newreceive.hnsjgg.com"); domainCard.setPort(9999); } //域名卡新乡C1后有01,鹿邑没有01 if (type == 0) { domainCard.setType(0); intent.putExtra("domainCard_xinxiang", domainCard); } else { domainCard.setType(1); intent.putExtra("domainCard_luyi", domainCard); } mContext.startActivity(intent); DomaindDialog.this.dismiss(); } }); } @Override public void show() { super.show(); /** * 设置宽度全屏,要设置在show的后面 */ WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity = CENTER; layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); } public interface libraryBack { void listener(int type); } } henanlibrary/src/main/res/layout/domain_dialog.xml
New file @@ -0,0 +1,104 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#40000000" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/dialog_bg_margin" android:background="@drawable/base_bg_dialog_top_stroke" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="300dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center" android:text="选择域名卡类型" android:textColor="@color/dialog_btn" android:textSize="23sp" android:textStyle="bold" /> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginTop="20dp" android:background="@color/line_bg" /> <RadioGroup android:id="@+id/radioLibrary" android:layout_width="match_parent" android:layout_height="wrap_content"> <RadioButton android:id="@+id/xinxiang" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:layout_marginTop="25dp" android:layout_marginRight="50dp" android:background="@drawable/radio_select" android:button="@null" android:gravity="center" android:padding="6dp" android:text="新乡域名卡" android:textColor="@drawable/radio_text_select" android:textSize="20sp" /> <RadioButton android:id="@+id/luyi" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:layout_marginTop="25dp" android:layout_marginRight="50dp" android:background="@drawable/radio_select" android:button="@null" android:gravity="center" android:padding="6dp" android:text="鹿邑域名卡" android:textColor="@drawable/radio_text_select" android:textSize="20sp" /> </RadioGroup> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginTop="35dp" android:background="@color/line_bg" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="5dp" android:orientation="horizontal"> <TextView android:id="@+id/ok" android:layout_width="match_parent" android:layout_height="@dimen/dialog_btn_height" android:background="@drawable/textview_select_bg" android:gravity="center" android:paddingLeft="15dp" android:paddingTop="5dp" android:paddingRight="15dp" android:paddingBottom="5dp" android:text="确 认" android:textColor="@color/dialog_btn" android:textSize="20sp" /> </LinearLayout> </LinearLayout> </LinearLayout> qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/PassWordActivity.java
@@ -28,40 +28,37 @@ super.onCreate(savedInstanceState); pswBinding = ActivityPswQhaBinding.inflate(LayoutInflater.from(this)); setContentView(pswBinding.getRoot()); pswBinding.waterOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { passWordBean = baseBaseDao.loginPsDao().findFirst(); pswBinding.waterOk.setOnClickListener(v -> { try { passWordBean = baseBaseDao.loginPsDao().findFirst(); if (!TextUtils.isEmpty(pswBinding.pswNew.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswOld.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswNewAgin.getText().toString())) { if ((passWordBean != null && (passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()))) || (WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()).equals("8af357996269a1b52b182a839150097d"))&& passWordBean == null)) { if (passWordBean == null) { passWordBean = new PassWordBean(); } if (pswBinding.pswNew.getText().toString().equals(pswBinding.pswNewAgin.getText().toString())) { passWordBean.setPassWord(pswBinding.pswNewAgin.getText().toString()); baseBaseDao.loginPsDao().insert(passWordBean); TipUtil.show(PassWordActivity.this, "密码修改完成", () -> { PassWordActivity.this.finish(); }); if (!TextUtils.isEmpty(pswBinding.pswNew.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswOld.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswNewAgin.getText().toString())) { if ((passWordBean != null && (passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(pswBinding.pswOld.getText().toString())))) || (WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()).equals("e10adc3949ba59abbe56e057f20f883e") && passWordBean == null)) { if (passWordBean == null) { passWordBean = new PassWordBean(); } if (pswBinding.pswNew.getText().toString().equals(pswBinding.pswNewAgin.getText().toString())) { passWordBean.setPassWord(pswBinding.pswNewAgin.getText().toString()); baseBaseDao.loginPsDao().insert(passWordBean); TipUtil.show(PassWordActivity.this, "密码修改完成", () -> { PassWordActivity.this.finish(); }); } else { TipUtil.show(PassWordActivity.this, "两次输入的密码不一致"); } } else { TipUtil.show(PassWordActivity.this, "旧密码输入错误"); TipUtil.show(PassWordActivity.this, "两次输入的密码不一致"); } } else { TipUtil.show(PassWordActivity.this, "请输完内容"); TipUtil.show(PassWordActivity.this, "旧密码输入错误"); } } catch (Exception e) { e.printStackTrace(); } else { TipUtil.show(PassWordActivity.this, "请输完内容"); } } catch (Exception e) { e.printStackTrace(); } }); } qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/card/UserCard.java
@@ -175,9 +175,9 @@ int year = (rechargeDate.get(Calendar.YEAR)) % 1000; int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1 int day = rechargeDate.get(Calendar.DAY_OF_MONTH); byte bcdYear = (byte) ((year / 10) << 4 | ((year % 10) / 100)); byte bcdMonth = (byte) ((month / 10) << 4 | (month % 10)); byte bcdDay = (byte) ((day / 10) << 4 | (day % 10)); byte bcdYear = HexUtil.getIntToBCD(year)[0]; byte bcdMonth = HexUtil.getIntToBCD(month)[0]; byte bcdDay = HexUtil.getIntToBCD(day)[0]; data[12] = bcdYear; data[13] = bcdMonth; data[14] = bcdDay; @@ -221,9 +221,9 @@ int year = (rechargeDate.get(Calendar.YEAR)) % 1000; int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1 int day = rechargeDate.get(Calendar.DAY_OF_MONTH); byte bcdYear = (byte) ((year / 10) << 4 | ((year % 10) / 100)); byte bcdMonth = (byte) ((month / 10) << 4 | (month % 10)); byte bcdDay = (byte) ((day / 10) << 4 | (day % 10)); byte bcdYear = HexUtil.getIntToBCD(year)[0]; byte bcdMonth = HexUtil.getIntToBCD(month)[0]; byte bcdDay = HexUtil.getIntToBCD(day)[0]; data[12] = bcdYear; data[13] = bcdMonth; data[14] = bcdDay;