将 java.lang.String 转换为 android.nfc.Tag

Convert java.lang.String to android.nfc.Tag

我有一组当前工作正常的代码,它们是:

我想创建一个没有 newIntent 之类的新项目,这是我的代码:

经过一些调试,我发现 currentTag 包含的内容是:

据我了解,currentTag是nfc芯片的详细信息。 我正在尝试对我的新项目做同样的事情,但没有成功。 对于 NFC 新手,我将不胜感激任何帮助或指点。谢谢!

编辑:这是 NFCTagHelper Class:

public class NfcTagHelper {
private static final int PAGE_FOR_WRITE_CHECK = 4;
private static final int PAGE_FOR_READ_RESULT = 6;
private static final byte FAILURE_RESULT = 0x22;
public static final byte TAG_LOST_RESULT = 0x33;
public static final byte UNKNOW_ERROR_RESULT=0x44;
private static final String TAG = NfcTagHelper.class.getSimpleName();
public boolean writeToTag(Tag tag,byte[] lockID) {
    boolean result=false;
    MifareUltralight mifareUltralight = MifareUltralight.get(tag);
    if (mifareUltralight==null) {
        Log.e("NfcTagHelper", "This tag don't support to wirte page");
        return false;
    }else {
        try {
            mifareUltralight.connect();
            mifareUltralight.writePage(PAGE_FOR_WRITE_CHECK,lockID);
            result =true;
        }catch (Exception exception) {
            result=false;
            Log.e("NfcTagHelper", "write Error:", exception);
        }finally {
            try {
                mifareUltralight.close();
            }catch (Exception exception) {
                result=false;
                Log.e("NfcTagHelper", "Exception:", exception);
            }
        }
    }
    return result;
}
public byte readFromTag(Tag tag) {
    byte result=0x00;
    MifareUltralight mifareUltralight = MifareUltralight.get(tag);
    if (mifareUltralight==null) {
        Log.e("NfcTagHelper", "This tag don't support to wirte page");
    }else {
        try {
            mifareUltralight.connect();
            byte[]payload = mifareUltralight.readPages(PAGE_FOR_READ_RESULT);
            result= payload[0];
        }catch (TagLostException tagLostException) {
            result = TAG_LOST_RESULT;
        }
        catch (Exception exception) {
            Log.e("NfcTagHelper", "Read Error:", exception);
            result=UNKNOW_ERROR_RESULT;
        }finally {
            try {
                mifareUltralight.close();
            }catch (Exception exception) {
                Log.e("NfcTagHelper", "Read Exception:", exception);
            }
        }
    }
    return result;
}

意图是Android进程间通信的主要方式。 Android NFC 堆栈(NFC 系统服务进程)通过发送 NFC 发现意图(NDEF_DISCOVEREDTECH_DISCOVEREDTAG_DSICOVERED) 或通过 reader 模式回调(activity 生命周期回调)。

因此,如果不处理 NFC 发现意图(例如,通过 onNewIntent 接收)或 ReaderCallback (onTagDiscovered),就无法获取 Tag 对象。

请注意,NFC 发现事件基本上是由用户触发的(即用户轻触标签以触发此类事件)。如果你想在按下按钮时处理标签,你有第二个用户触发的事件,你不应该期望它们彼此同步。此外,您不应该期望用户长时间接触标签(不仅因为这对用户来说很难处理,而且手机和标签通过无线接口进行通信并且通信可能会中断)。

最好的方法是,在用户单击按钮后,切换到您接受 NFC 发现事件的状态(例如设置标志)。然后,在完成标签 IO 后,您可以清除该标志以切换回不再接受新标签的状态。