app/src/main/java/com/dayu/recharge/activity/BaseNfcActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/tools/LoyaltyCardReader.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/tools/NFCUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/java/com/dayu/recharge/activity/BaseNfcActivity.java
@@ -14,11 +14,13 @@ import android.nfc.NfcEvent; import android.nfc.Tag; import android.nfc.cardemulation.CardEmulation; import android.os.Bundle; import android.os.Handler; import android.os.Message; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.tools.LoyaltyCardReader; import com.dayu.recharge.tools.NFCUtil; import com.dayu.recharge.tools.NfcReadHelper; import com.dayu.recharge.utils.LogUtil; import com.dayu.recharge.utils.TipUtil; @@ -53,35 +55,34 @@ public final static int ERROR = -1; protected NfcAdapter mNfcAdapter; private PendingIntent mPendingIntent; // protected NfcAdapter mNfcAdapter; // private PendingIntent mPendingIntent; volatile UserCard userCard; Handler handler; public LoyaltyCardReader mLoyaltyCardReader; NFCUtil nfcUtil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); nfcUtil = NFCUtil.getInstance(); nfcUtil.setAccountCallback(this); } /** * onCreat->onStart->onResume->onPause->onStop->onDestroy * 启动Activity,界面可见时. */ public static int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK; @Override protected void onStart() { super.onStart(); //此处adapter需要重新获取,否则无法获取message mNfcAdapter = NfcAdapter.getDefaultAdapter(this); Intent intent = new Intent(this, getClass()); //一旦截获NFC消息,就会通过PendingIntent调用窗口 mPendingIntent = PendingIntent.getActivity(this, 0, intent, 0); // mLoyaltyCardReader = new LoyaltyCardReader(this); // if (mNfcAdapter != null) { // mNfcAdapter.enableReaderMode(this, mLoyaltyCardReader, READER_FLAGS, null); // } nfcUtil.onStartNfcAdapter(this); } @@ -91,12 +92,7 @@ @Override public void onResume() { super.onResume(); if (!ifNFCUse(this)) { this.finish(); } //设置处理优于所有其他NFC的处理 if (mNfcAdapter != null) mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); nfcUtil.onResumeNfcAdapter(this); } /** @@ -106,43 +102,17 @@ public void onPause() { super.onPause(); //恢复默认状态 if (mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(this); // mNfcAdapter.disableReaderMode(this); } // @Override // protected void onDestroy() { // super.onDestroy(); // if (mNfcAdapter != null) // mNfcAdapter.disableReaderMode(this); // } /** * 检测工作,判断设备的NFC支持情况 * * @return */ protected Boolean ifNFCUse(Activity context) { if (mNfcAdapter == null) { TipUtil.show(context, "设备不支持NFC!"); return false; } if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) { TipUtil.show(context, "请在系统设置中先启用NFC功能!"); return false; } return true; nfcUtil.onPauseNfcAdapter(this); } @Override public void onAccountReceived(Tag tag) { public void physicalCardDoing(Tag tag) { Intent intent = new Intent(this, getClass()); intent.putExtra(NfcAdapter.EXTRA_TAG, tag); startActivity(intent); } @Override public void virtualCardDoing(Tag tag) { } } app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -1,6 +1,7 @@ package com.dayu.recharge.activity; import android.content.Intent; import android.nfc.Tag; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -80,8 +81,8 @@ String userName; AdminDataBean adminData; RechargeBean rechargeBean; Intent intent; // Intent intent; Tag mTag; RegisteredCard registeredCard; CleanUserCard cleanUserCard; @@ -192,7 +193,7 @@ */ private void checkHasUser() { String cardType = NfcReadHelper.getInstence(intent).getCradType(); String cardType = NfcReadHelper.getInstence(mTag).getCradType(); Log.i("NFCWreatActivity", "cardType=" + cardType); if (cardType.equals(MyCommon.USER_CARD_TYPE_1) || cardType.equals(MyCommon.USER_CARD_TYPE_2) || @@ -221,32 +222,32 @@ || configurationPowerCard != null) { if (userCard != null && TextUtils.isEmpty(morny)) { userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); } if (cleanCard != null) { NFCWriteHelper.getInstence(intent).changePasword(1); setClean(intent, cleanCard); NFCWriteHelper.getInstence(mTag).changePasword(1); setClean(mTag, cleanCard); } if (manageCard != null) { setmanageCard(intent, manageCard); setmanageCard(mTag, manageCard); } if (registeredCard != null) { setRegisteredCard(intent, registeredCard); setRegisteredCard(mTag, registeredCard); } if (cleanUserCard != null) { setCleanUserCard(intent, cleanUserCard); setCleanUserCard(mTag, cleanUserCard); } if (domainCard != null) { setDomainCard(intent, domainCard); setDomainCard(mTag, domainCard); } if (testCard != null) { setTestCard(intent, testCard); setTestCard(mTag, testCard); } if (configureDeviceRegistrationCrad != null) { setConfigDeviceRegiest(intent, configureDeviceRegistrationCrad); setConfigDeviceRegiest(mTag, configureDeviceRegistrationCrad); } if (configurationPowerCard != null) { setConfigurationPower(intent, configurationPowerCard); setConfigurationPower(mTag, configurationPowerCard); } if ((configPowerFlag || configDeviceRegiestFlag || testCardFlag || domainCrdFlag || userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag || cleanUserCardFlag)) { try { @@ -290,11 +291,12 @@ } } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); public void physicalCardDoing(Tag tag) { super.physicalCardDoing(tag); mTag = tag; try { this.intent = intent; startAnim(); Log.i("NFCWreatActivity", "isUser:" + isUser); if (isUser) { @@ -313,6 +315,12 @@ e.printStackTrace(); CrashReport.postCatchedException(e); } } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); } @@ -408,7 +416,7 @@ userCard.setRechargeTimes(userCard.getRechargeTimes() + 1); } else if ("01".equalsIgnoreCase(state)) { userCard.setState("01"); userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); NFCWreatActivity.this.finish(); TipUtil.show("充值报文错误-禁用"); } else if ("02".equalsIgnoreCase(state)) { @@ -444,12 +452,12 @@ //往卡内写充值后的数据 private void rechargeWrratCard() { UserCard userCardold = NfcReadHelper.getInstence(intent).getUserCardData(); UserCard userCardold = NfcReadHelper.getInstence(mTag).getUserCardData(); if (userCardold != null) { //判断是否充值的是一个卡 if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) { userCard.setState("00"); userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); // 打印相关 if (userFlag) { setPrinterData(rechargeBean); @@ -465,7 +473,7 @@ } } private void setmanageCard(Intent intent, final ManageCard manageCard) { private void setmanageCard(Tag intent, final ManageCard manageCard) { manageCardFlag = NFCWriteHelper.getInstence(intent).writeData(manageCard.toZeroByte(), 1, 0); } @@ -475,7 +483,7 @@ * @param intent * @param clearOrInitCard */ private void setClean(Intent intent, final CleanCard clearOrInitCard) { private void setClean(Tag intent, final CleanCard clearOrInitCard) { cleanFlag = NFCWriteHelper.getInstence(intent).writeData(clearOrInitCard.toByte(), 1, 0); } @@ -486,7 +494,7 @@ * @param intent * @param registeredCard */ private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) { private void setRegisteredCard(Tag intent, RegisteredCard registeredCard) { registeredFlag = NFCWriteHelper.getInstence(intent).writeData(registeredCard.toByte(), 1, 0); } @@ -496,7 +504,7 @@ * @param intent * @param cleanUserCard */ private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) { private void setCleanUserCard(Tag intent, CleanUserCard cleanUserCard) { cleanUserCardFlag = NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0); } @@ -506,7 +514,7 @@ * @param intent * @param domainCard */ private void setDomainCard(Intent intent, DomainCard domainCard) { private void setDomainCard(Tag intent, DomainCard domainCard) { try { domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0); if (!domainCrdFlag) { @@ -523,16 +531,16 @@ } } private void setTestCard(Intent intent, TestCard testCard) { private void setTestCard(Tag intent, TestCard testCard) { testCardFlag = NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0); } private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) { private void setConfigDeviceRegiest(Tag intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) { configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0); } private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) { private void setConfigurationPower(Tag intent, ConfigurationPowerCard configurationPowerCard) { try { configPowerFlag = NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0); } catch (Exception e) { @@ -611,7 +619,7 @@ userCard.setBalance(balance); userCard.setState("00"); //补卡逻辑 userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); if (userFlag) { TipUtil.show(NFCWreatActivity.this, "补卡成功", new TipUtil.TipListener() { @Override @@ -625,7 +633,7 @@ stateText.append("禁用"); userCard.setState("01"); userCard.setBalance(balance); userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); startDetailActivity(name, stateText.toString()); } else if ("02".equals(state)) { @@ -660,8 +668,9 @@ } } protected void onDestroy() { super.onDestroy(); nfcWreatActivity=null; nfcWreatActivity = null; } } app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -2,6 +2,7 @@ import android.content.Intent; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.os.Bundle; import android.os.Message; import android.view.LayoutInflater; @@ -57,7 +58,8 @@ volatile UserCard userCard; ActivityRedCardBinding redCardBinding; Intent intent; // Intent intent; Tag mTag; @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,7 +75,7 @@ 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); @@ -91,14 +93,20 @@ } } @Override public void physicalCardDoing(Tag tag) { super.physicalCardDoing(tag); mTag = tag; ProgressDialog.show(this); readAllData(tag); } @Override public void onNewIntent(Intent intent) { this.intent = intent; ProgressDialog.show(this); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { readAllData(intent); } // this.intent = intent; super.onNewIntent(intent); } @@ -106,7 +114,7 @@ * 读取全部数据 */ public void readAllData(Intent intent) { public void readAllData(Tag intent) { NfcReadHelper.getInstence(intent) .getOneSectorData(new NfcReadHelper.NFCCallListback() { @Override @@ -252,12 +260,12 @@ userCard.setBalance(balance); userCard.setState("00"); WriteCardUtils.setUser(intent, userCard); WriteCardUtils.setUser(mTag, userCard); stateText.append("启用"); } else if ("01".equals(state)) { userCard.setBalance(balance); userCard.setState("01"); WriteCardUtils.setUser(intent, userCard); WriteCardUtils.setUser(mTag, userCard); stateText.append("禁用"); } else if ("02".equals(state)) { stateText.append("隶属信息不符"); app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
@@ -1,6 +1,7 @@ package com.dayu.recharge.activity; import android.content.Intent; import android.nfc.Tag; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; @@ -37,7 +38,7 @@ */ public class RechargeActivity extends BaseNfcActivity { Intent intent; // Intent intent; boolean userFlag; ActivityRechargeBinding binding; @@ -46,6 +47,7 @@ AdminDataBean adminData; String userName; Tag mTag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -61,10 +63,30 @@ } } @Override public void physicalCardDoing(Tag tag) { super.physicalCardDoing(tag); try { mTag=tag; userCard = NfcReadHelper.getInstence(tag).getUserCardData(); if (userCard != null) { ProgressDialog.show(this); selectBalance(userCard.getInitPeasantCode()); } else { TipUtil.show(RechargeActivity.this, "卡片读取失败"); } } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } public void onNewIntent(Intent intent) { try { this.intent = intent; // this.intent = intent; userCard = NfcReadHelper.getInstence(intent).getUserCardData(); if (userCard != null) { ProgressDialog.show(this); @@ -213,7 +235,7 @@ stateText.append("该卡已被禁用"); userCard.setState("01"); userCard.setBalance(balance); userFlag = WriteCardUtils.setUser(intent, userCard); userFlag = WriteCardUtils.setUser(mTag, userCard); } else if ("02".equals(state)) { stateText.append("隶属信息不符"); } else if ("03".equals(state)) { app/src/main/java/com/dayu/recharge/tools/LoyaltyCardReader.java
@@ -16,9 +16,11 @@ package com.dayu.recharge.tools; import android.annotation.TargetApi; import android.app.Activity; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.tech.IsoDep; import android.nfc.tech.MifareClassic; import android.os.Build; import android.util.Log; @@ -45,14 +47,21 @@ // Weak reference to prevent retain loop. mAccountCallback is responsible for exiting // foreground mode before it becomes invalid (e.g. during onPause() or onStop()). private WeakReference<AccountCallback> mAccountCallback; private AccountCallback mAccountCallback; Activity mActivity; public interface AccountCallback { public void onAccountReceived(Tag tag); //实体卡回调 public void physicalCardDoing(Tag tag); //虚拟卡回调 public void virtualCardDoing(Tag tag); } public LoyaltyCardReader(AccountCallback accountCallback) { mAccountCallback = new WeakReference<AccountCallback>(accountCallback); public LoyaltyCardReader(Activity activity, AccountCallback accountCallback) { mActivity = activity; mAccountCallback = accountCallback; } /** @@ -65,44 +74,54 @@ @Override public void onTagDiscovered(Tag tag) { Log.i(TAG, "New tag discovered"); mAccountCallback.get().onAccountReceived(tag); // Android's Host-based Card Emulation (HCE) feature implements the ISO-DEP (ISO 14443-4) // protocol. // // In order to communicate with a device using HCE, the discovered tag should be processed // using the IsoDep class. IsoDep isoDep = IsoDep.get(tag); if (isoDep != null) { try { // Connect to the remote NFC device isoDep.connect(); // Build SELECT AID command for our loyalty card service. // This command tells the remote device which service we wish to communicate with. Log.i(TAG, "Requesting remote AID: " + SAMPLE_LOYALTY_CARD_AID); // mAccountCallback.get().onAccountReceived(); byte[] command = BuildSelectApdu(SAMPLE_LOYALTY_CARD_AID); // Send command to remote device Log.i(TAG, "Sending: " + ByteArrayToHexString(command)); // mAccountCallback.get().onAccountReceived(); byte[] result = isoDep.transceive(command); // If AID is successfully selected, 0x9000 is returned as the status word (last 2 // bytes of the result) by convention. Everything before the status word is // optional payload, which is used here to hold the account number. int resultLength = result.length; byte[] statusWord = {result[resultLength - 2], result[resultLength - 1]}; byte[] payload = Arrays.copyOf(result, resultLength - 2); if (Arrays.equals(SELECT_OK_SW, statusWord)) { // The remote NFC device will immediately respond with its stored account number String accountNumber = new String(payload, "UTF-8"); Log.i(TAG, "Received: " + accountNumber); // Inform CardReaderFragment of received account number // mAccountCallback.get().onAccountReceived(); MifareClassic mifareClassic= MifareClassic.get(tag); //普通M1卡 if (mifareClassic!=null){ mActivity.runOnUiThread(new Runnable() { @Override public void run() { mAccountCallback.physicalCardDoing(tag); } } catch (IOException e) { Log.e(TAG, "Error communicating with card: " + e.toString()); }); }else { // Android 的基于主机的卡仿真 (HCE) 功能实现了 ISO-DEP (ISO 14443-4) 协议。为了使用 HCE 与设备通信,应使用 IsoDep 类处理发现的标记。 IsoDep isoDep = IsoDep.get(tag); if (isoDep != null) { try { // Connect to the remote NFC device isoDep.connect(); // Build SELECT AID command for our loyalty card service. // This command tells the remote device which service we wish to communicate with. Log.i(TAG, "Requesting remote AID: " + SAMPLE_LOYALTY_CARD_AID); // mAccountCallback.get().onAccountReceived(); byte[] command = BuildSelectApdu(SAMPLE_LOYALTY_CARD_AID); // Send command to remote device Log.i(TAG, "Sending: " + ByteArrayToHexString(command)); // mAccountCallback.get().onAccountReceived(); byte[] result = isoDep.transceive(command); // If AID is successfully selected, 0x9000 is returned as the status word (last 2 // bytes of the result) by convention. Everything before the status word is // optional payload, which is used here to hold the account number. int resultLength = result.length; byte[] statusWord = {result[resultLength - 2], result[resultLength - 1]}; byte[] payload = Arrays.copyOf(result, resultLength - 2); if (Arrays.equals(SELECT_OK_SW, statusWord)) { // The remote NFC device will immediately respond with its stored account number String accountNumber = new String(payload, "UTF-8"); Log.i(TAG, "Received: " + accountNumber); // Inform CardReaderFragment of received account number // mAccountCallback.get().onAccountReceived(); } } catch (IOException e) { Log.e(TAG, "Error communicating with card: " + e.toString()); } } } } /** app/src/main/java/com/dayu/recharge/tools/NFCUtil.java
New file @@ -0,0 +1,100 @@ package com.dayu.recharge.tools; import android.app.Activity; import android.content.Context; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.util.Log; import android.widget.Toast; /** * Created by Android Studio. * author: zuo * Date: 2023-11-30 * Time: 10:27 * 备注: */ public class NFCUtil { static String TAG = "NFCUtil"; static NFCUtil nfcUtil; static NfcAdapter mNfcAdapter; public static int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK; private static boolean isOpen = false; LoyaltyCardReader.AccountCallback accountCallback; public void setAccountCallback(LoyaltyCardReader.AccountCallback accountCallback) { this.accountCallback = accountCallback; } /** * 获取NFC的单例 * * @return NfcUtils */ public static NFCUtil getInstance() { if (nfcUtil == null) { synchronized (NFCUtil.class) { if (nfcUtil == null) { nfcUtil = new NFCUtil(); } } } return nfcUtil; } /** * 在onStart中检测是否支持nfc功能 * * @param context 当前页面上下文 */ public void onStartNfcAdapter(Activity context) { mNfcAdapter = NfcAdapter.getDefaultAdapter(context);//设备的NfcAdapter对象 if (mNfcAdapter == null) {//判断设备是否支持NFC功能 Toast.makeText(context, "设备不支持NFC功能!", Toast.LENGTH_SHORT).show(); context.finish(); return; } if (!mNfcAdapter.isEnabled()) {//判断设备NFC功能是否打开 Toast.makeText(context, "请到系统设置中打开NFC功能!", Toast.LENGTH_SHORT).show(); return; } Log.d(TAG, "NFC is start"); } /** * 在onResume中开启nfc功能 * * @param activity */ public void onResumeNfcAdapter(Activity activity) { if (mNfcAdapter != null && mNfcAdapter.isEnabled()) { // mNfcAdapter.enableForegroundDispatch(this,mPendingIntent,null,null);//打开前台发布系统,使页面优于其它nfc处理.当检测到一个Tag标签就会执行mPendingItent if (!isOpen) mNfcAdapter.enableReaderMode(activity, new LoyaltyCardReader(activity, accountCallback), READER_FLAGS, null); isOpen = true; Log.d(TAG, "Resume"); } } /** * 在onPause中关闭nfc功能 * * @param activity */ public void onPauseNfcAdapter(Activity activity) { if (mNfcAdapter != null && mNfcAdapter.isEnabled()) { if (isOpen) mNfcAdapter.disableReaderMode(activity); isOpen = false; } Log.d("myNFC", "onPause"); } } app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
@@ -32,8 +32,8 @@ private static NFCWriteHelper helper; private static int PASSWORD_LENTH = 12; public NFCWriteHelper(Intent intent) { this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); public NFCWriteHelper(Tag intent) { this.tag = intent; } /** @@ -42,7 +42,7 @@ * @param intent * @return */ public static NFCWriteHelper getInstence(Intent intent) { public static NFCWriteHelper getInstence(Tag intent) { if (helper == null) { helper = new NFCWriteHelper(intent); } app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
@@ -24,13 +24,13 @@ */ public class NfcReadHelper extends BaseNFCHelper { private Tag tag; private Tag mTag; // private NFCCallback callback; private static NfcReadHelper helper; public NfcReadHelper(Intent intent) { this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); this.mTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); } @@ -48,6 +48,23 @@ } /** * 单例初始化 * * @param intent * @return */ public static NfcReadHelper getInstence(Tag tag) { if (helper == null) { helper = new NfcReadHelper(tag); } return helper; } public NfcReadHelper(Tag tag) { mTag = tag; } /** * 获取用户卡信息 * * @return @@ -55,7 +72,7 @@ public UserCard getUserCardData() { UserCard userCard = null; Map<String, List<byte[]>> map = new HashMap<>(); MifareClassic mfc = MifareClassic.get(tag); MifareClassic mfc = MifareClassic.get(mTag); if (null != mfc) { try { //链接NFC @@ -113,7 +130,7 @@ public String getCradType() { MifareClassic mfc = MifareClassic.get(tag); MifareClassic mfc = MifareClassic.get(mTag); if (null != mfc) { try { mfc.connect(); @@ -154,7 +171,7 @@ */ public void getAllData(final NFCCallMapback callback) { Map<String, List<byte[]>> map = new HashMap<>(); MifareClassic mfc = MifareClassic.get(tag); MifareClassic mfc = MifareClassic.get(mTag); if (null != mfc) { try { //链接NFC @@ -225,7 +242,7 @@ MifareClassic mfc = null; try { mfc = MifareClassic.get(tag); mfc = MifareClassic.get(mTag); } catch (Exception e) { e.printStackTrace(); } @@ -295,7 +312,7 @@ @Override public void run() { Map<String, List<String>> map = new HashMap<>(); MifareClassic mfc = MifareClassic.get(tag); MifareClassic mfc = MifareClassic.get(mTag); if (null != mfc) { try { mfc.connect(); app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java
@@ -1,6 +1,7 @@ package com.dayu.recharge.tools; import android.content.Intent; import android.nfc.Tag; import com.dayu.recharge.card.UserCard; @@ -15,7 +16,7 @@ static boolean userFlag = false; //向卡写入用户信息 public static boolean setUser(Intent intent, UserCard userCard) { public static boolean setUser(Tag intent, UserCard userCard) { userFlag = NFCWriteHelper.getInstence(intent).writeData(userCard.getZeroBytes(), 1, 0); if (!userFlag) { return false;