2017-05-25 142 views
3

。我已经成功实现了标签检测并基于标签,我知道我需要使用哪个类来提取数据。但是有一个问题,我需要使用/ tap来获取数据的卡使用IsoDep技术,而不是NDEF。我知道如何从正在使用NDEF技术的卡上提取数据,但由于IsoDep技术,我在这里卡住了。我与这个问题分享我的代码片段,以便更好地理解。如何提取通过IsoDep技术数据 - 我使用NFC技术为我的Android项目之一NFC(安卓)

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和我越来越IsoDep,tech.NFcA,NdefFormattable作为标记变量值的条件内TAG_DISCOVERED。我正在创建IsoDep类的实例并调用connect()方法。在这里,我每次尝试启动连接以读取数据时都会收到IOException,我不知道为什么! 任何人都可以帮我解决这个问题吗?任何帮助将是可观的。

感谢

回答

0

首先,您应检查.get呼叫是否通过检查是否isoDep == null工作。

至于你IOException,很难找出问题的具体原因,如果你不能提供的代码。从标签提取数据的方法因制造商而异。您注意到该标签也支持NfcA,如果此技术不起作用,可能值得研究。

然而,有些事情要考虑:

  • 您是否尝试过超过1个标签?你能确认问题与标签无关吗?
  • 您是否正确设置了NFC权限设置?否则不合逻辑的IOException可能是因为这个原因。
  • 你打电话从另一个线程.close()?这将导致IOException。
+0

感谢您的回复@henrycjc我已经检查了IsoDep的对象在我的情况不是null。同样对于所有其他技术,我越来越空,所以我认为我只需要在这种情况下使用IsoDep技术。 –

+0

只是为了澄清,空检查只是一个很好的做法,而不是解决问题的办法。但是,你是说NfcA出现在'Tag.getTechList()'中,但是你不能成功'.get'?你确定你还没有连接其他技术吗?你也可以解决IOException的问题吗?你想要做什么还是有点不清楚。 – henrycjc

+0

好的,所以我再次检查了我成功Nfca.get(标签)。关于使用IsoDep技术执行任何操作时的IOException,我们需要首先连接()它,但是在执行此操作时收到IO异常。希望你有这个时间。 –

0

您可以使用PlayStore中的TagInfo来找出确切的卡片细节,然后从那里开始工作。 TapLinxSDK可能会帮助你。