繁体   English   中英

写入iCODE标签Android 6.0后,NFC停止工作

[英]NFC stops working after writing on iCODE tags, Android 6.0

我正在开发一个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){}
        }
    }
}

我无法理解我可能做错了什么......

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM