如何通过IsoDep技术提取数据 - NFC(Android)



我在Android中的一个项目中使用了NFC技术。我已经成功地实现了标签检测,并且根据标签我知道我需要使用哪个类来提取数据。但是有一个问题,我需要使用/点击来获取数据的卡使用的是 IsoDep 技术而不是 NDEF 技术。我知道如何从使用 NDEF 技术的卡中提取数据,但由于 IsoDep 技术,我被困在这里。我正在与这个问题分享我的代码片段,以便更好地理解。

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
IsoDep isoDep = IsoDep.get(tag);
isoDep.connect();
//code to get the data from card
isoDep.close()
}

所以在这里,我通过NFCAdapter获得TAG_DISCOVERED,在条件中,我得到了IsoDep,技术。NFcA,NdefFormattable 作为标签变量值。我正在创建 IsoDep 类的实例并调用 connect(( 方法。在这里,每次尝试启动连接以读取我不知道为什么的数据时,我都会获得IOException!!谁能帮我解决这个问题?任何帮助都是可观的。

谢谢

首先,您应该通过检查 isoDep == null 来检查 .get 调用是否有效。

至于您的IOException,如果您无法提供代码,则很难确定问题的具体原因。从标签中提取数据的方法因制造商而异。您注意到该标签也支持 NfcA ,如果这项技术也不起作用,可能值得调查。

但是,需要考虑的一些事项:

  • 您是否尝试过使用多个标签?您能否确认问题与标签无关?
  • 您的 NFC 权限设置是否正确?否则不合逻辑的IOException可能是因为这个。
  • 您是否从另一个线程调用.close()?这将导致 IOException。

最新更新