如何使用android将信息写入mifare超轻EV1 NFC卡?

问题描述 投票:0回答:2

我已经成功将信息写入我的nfc卡,但现在它不再工作了,这是我的代码:

  public void writeTag(MifareUltralight mifareUlTag) {
    try {
        mifareUlTag.connect();
        String val=getRandomString();

       // mifareUlTag.writePage(4, "rfa".getBytes(Charset.forName("US-ASCII")));
       // mifareUlTag.writePage(5, "nfc".getBytes(Charset.forName("US-ASCII")));
        mifareUlTag.writePage(10, val.getBytes(Charset.forName("US-ASCII")));
        //mifareUlTag.writePage(7, " now".getBytes(Charset.forName("US-ASCII")));
    } catch (IOException e) {
        Log.e(TAG, "IOException while writing MifareUltralight...", e);
    } finally {
        try {
            mifareUlTag.close();
        } catch (IOException e) {
            Log.e(TAG, "IOException while closing MifareUltralight...", e);
        }
    }
}

发生的错误是:

android.nfc.TagLostException: Tag was lost
getRandomString
方法是一个返回 3 个字符的随机字符串的函数。 我的卡又可以使用了,因为我可以读取他的号码。

android nfc mifare
2个回答
0
投票

我发现,对于真正的用户来说,在执行除读取 Ndef 数据以外的任何操作时,尤其是尝试写入数据时,很容易获得

TagLostException
IOException
enableForegroundDispatch

原因很简单,使用

enableForegroundDispatch
你无法控制通知声音。

用户过早地听到并从 RF 场中移除标签,当系统 NFC 应用程序检测到标签时,会产生声音,然后必须制作

enableForegroundDispatch
,暂停并恢复您的应用程序才能正常工作。能够交付该
Intent
,您的应用程序必须处理该
Intent
,然后开始写入标签。
我发现使用

Intent

更可靠,您可以关闭系统应用程序通知声音,并在完成写入标签后发出自己的声音。

enableReaderMode
也不会暂停和恢复您的应用程序,而是在新线程中处理标签读取,这通常开销较小且速度更快,从而导致出现类似
enableReaderMode
等错误的可能性较低
当然,这些错误仍然可能会生成,您的代码必须处理这些错误,并且使用

TagLostException

,您可以生成“失败”声音来提示用户代表标签,或者像我一样对任何错误保持沉默,然后重试当标签再次出现时写入。

enableReaderMode

只是为用户提供了比

enableReaderMode
 更强大、更不易混淆的交互

更新:

您是否尝试过写入 4 个字符,因为发送的数据必须是 4 个字节,您可能没有发送足够的数据。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.