java - 在 iCODE 标签上写入后 NFC 停止工作,Android 6.0

标签 java android android-studio nfc ndef

我正在开发一个 android 应用程序来读取和写入不同的 NFC 标签。我遇到了特定标签 iCODE SLI X 和 iCODE SLI S 的问题。在标签上写入信息后,我无法执行任何其他操作,看起来 NFC 停止正常工作,因为如果我重新启动它,它实际上会读取标签。如果我使用其他标签类型(如 MIFARE Classic 1K),则不会发生这种情况。安卓版本为6.0。

另一方面,如果我在装有 Android 6.1 或 7.0(完全相同的代码)的另一台设备上尝试该应用程序,iCODE SLI X 和 iCODE SLIS 可以正常工作,但 MIFARE Classic 1K 不行。

除了尝试不同的代码示异常(exception),我还在这些设备上尝试了 2 个应用程序。在“NFC 工具”上,您可以看到与我的应用程序完全相同的问题。 NXP 的“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){}
        }
    }
}

我不明白我可能做错了什么......

最佳答案

我设法了解我的应用程序出了什么问题,所以我自己发布了答案。事情是这样的:

当我尝试在标签上写入信息时,我首先检查标签是否被格式化为在其上使用“Ndef”技术,如果不是,我使用“NdefFormatable”来格式化标签。

奇怪的是,某些设备中的某个标签支持“NdefFormatable”,而在某些设备中则不支持。 (不确定它是否与 NFC 本身或操作系统版本有关)。这导致 NFC 在我尝试使用“NdefFormatable”后行为异常或根本无法工作。

我现在正在做的是我已经构建了这个函数,它提供了我可以在标签上使用的技术。根据它,我使用“NdefFormatable”或“NfcV”(对于 iCODE 标签)在标签上读取或写入。

关于java - 在 iCODE 标签上写入后 NFC 停止工作,Android 6.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199967/

相关文章:

java - 需要一个免费工具从java创建exe文件

java - 在android中顺序合并2个音频文件?

android - 如何在Android Studio中的ISO 8859-1中存储文件

android - 使用gradle命令行显示依赖项列表?

java - 如何在Windows中模仿Unix文件系统?

java - 如何在 Windows 7 操作系统中运行 .class 文件?

android - 在 Android 中有条件地更改 layout.xml 中的值

java - Android Studio & AdMob——无法实例化以下类

java - 循环每个元素并执行其自己的操作,然后将其存储在 list<String> 中

android - 具有 map Intent 的标记标签