我正在开发一个Android应用程序来读取和编写不同的NFC标签。我遇到了特定标签的问题,iCODE SLI X和iCODE SLI S.在我写了关于标签的信息后,我无法做任何其他动作,看起来NFC停止正常工作,因为如果我重新启动它,它实际上会读取标签。如果我使用另一种标签类型,如MIFARE Classic 1K,则不会发生这种情况。 Android版本是6.0。
另一方面,如果我在使用Android 6.1或7.0(完全相同的代码)的另一台设备上试用该应用程序,iCODE SLI X和iCODE SLIS将正常工作,但不适用于MIFARE Classic 1K。
除了尝试不同的代码示例外,我还在这些设备上尝试了2个应用程序。在“NFC工具”上,您可以看到与我的应用程序完全相同的问题。来自恩智浦的“TagWriter”是唯一一款适用于所有类型标签的魅力的应用程序。
以下是我用来编写标签信息的代码:
@Override
protected void onNewIntent(Intent intent) {
if (mNfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
try {
Ndef ndef = Ndef.get(tag);
NdefRecord text1 = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
youstring1.getBytes(Charset.forName("US-ASCII")),
null,
youstring1.getBytes());
NdefRecord text2 = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
youstring2.getBytes(Charset.forName("US-ASCII")),
null,
youstring2.getBytes());
NdefRecord[] records = {text1, text2};
NdefMessage message = new NdefMessage(records);
if (ndef != null) {
NdefMessage ndefMesg = ndef.getCachedNdefMessage();
if (ndefMesg != null) {
ndef.connect();
ndef.writeNdefMessage(message);
ndef.close();
}
} else {
NdefFormatable ndefFormatable = NdefFormatable.get(tag);
if (ndefFormatable != null) {
// initialize tag with new NDEF message
try {
ndefFormatable.connect();
ndefFormatable.format(message);
ndefFormatable.close();
} finally {
try {
//ndefFormatable.close();
} catch (Exception e) {
}
}
}
}
}catch (FormatException |IOException ue){}
}
}
}
我无法理解我可能做错了什么......
答案 0 :(得分:1)
我设法了解我的申请有什么问题,所以我自己发布了答案。事情就是这样:
当我尝试在标签上写信息时,我首先检查标签是否格式化为使用" Ndef"技术就可以了,如果不是我使用" NdefFormatable"格式化标签。
奇怪的是,某些设备中的某个标签支持" NdefFormatable"而在某些情况下它并没有。 (不确定它是否与NFC本身或OS版本有关)。在我尝试使用" NdefFormatable"之后,这导致NFC行为不端或根本不工作。
我现在正在做的是我已经构建了这个功能,它提供了我可以在标签上使用的技术。根据它,我使用" NdefFormatable"或" NfcV" (用于iCODE标签)读取或写入标签。