我在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。