将 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_DISCOVERED
、TECH_DISCOVERED
和 TAG_DSICOVERED
) 或通过 reader 模式回调(activity 生命周期回调)。
因此,如果不处理 NFC 发现意图(例如,通过 onNewIntent
接收)或 ReaderCallback (onTagDiscovered
),就无法获取 Tag
对象。
请注意,NFC 发现事件基本上是由用户触发的(即用户轻触标签以触发此类事件)。如果你想在按下按钮时处理标签,你有第二个用户触发的事件,你不应该期望它们彼此同步。此外,您不应该期望用户长时间接触标签(不仅因为这对用户来说很难处理,而且手机和标签通过无线接口进行通信并且通信可能会中断)。
最好的方法是,在用户单击按钮后,切换到您接受 NFC 发现事件的状态(例如设置标志)。然后,在完成标签 IO 后,您可以清除该标志以切换回不再接受新标签的状态。
我有一组当前工作正常的代码,它们是:
我想创建一个没有 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_DISCOVERED
、TECH_DISCOVERED
和 TAG_DSICOVERED
) 或通过 reader 模式回调(activity 生命周期回调)。
因此,如果不处理 NFC 发现意图(例如,通过 onNewIntent
接收)或 ReaderCallback (onTagDiscovered
),就无法获取 Tag
对象。
请注意,NFC 发现事件基本上是由用户触发的(即用户轻触标签以触发此类事件)。如果你想在按下按钮时处理标签,你有第二个用户触发的事件,你不应该期望它们彼此同步。此外,您不应该期望用户长时间接触标签(不仅因为这对用户来说很难处理,而且手机和标签通过无线接口进行通信并且通信可能会中断)。
最好的方法是,在用户单击按钮后,切换到您接受 NFC 发现事件的状态(例如设置标志)。然后,在完成标签 IO 后,您可以清除该标志以切换回不再接受新标签的状态。