我目前正在开发一个应用程序,该应用程序将阅读NFC tags
目前我已编写代码以获取TAG id
我接下来应该做什么?如果intent
名为EXTRA_NDEF_MESSAGES
的额外public void onNewIntent(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String zin = tag.getTechList()[0];
info.setText("TagID: " + bytesToHex(tag.getId())+" Saturs: "+zin);
}
为空,我该如何阅读所有数据。
目前读取RFID的代码是
NFC tag
我想知道如何阅读{{1}}中的所有数据。
非常感谢你!
答案 0 :(得分:1)
有各种类型的nfc标签(例如Mifare Ultralight,Mifare Ultralight C,Mifare Classic,felica ......)。 每个标签都有不同的内存大小和读取过程。 例如:Mifare Ultralight有64字节,但mifare Classic 1k包含1千字节内存。 要从mifare ultralight读取数据,不需要额外的身份验证,但Mifare classic需要身份验证。 获得新意图时您可以解析它以获取标记信息:
@Override
protected void onNewIntent(Intent intent){
getTagInfo(intent)
}
private void getTagInfo(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String[] techList = tag.getTechList();
for (int i = 0; i < techList.length; i++) {
if (techList[i].equals(MifareClassic.class.getName())) {
MifareClassic mifareClassicTag = MifareClassic.get(tag);
switch (mifareClassicTag.getType()) {
case MifareClassic.TYPE_CLASSIC:
//Type Clssic
break;
case MifareClassic.TYPE_PLUS:
//Type Plus
break;
case MifareClassic.TYPE_PRO:
//Type Pro
break;
}
} else if (techList[i].equals(MifareUltralight.class.getName())) {
//For Mifare Ultralight
MifareUltralight mifareUlTag = MifareUltralight.get(tag);
switch (mifareUlTag.getType()) {
case MifareUltralight.TYPE_ULTRALIGHT:
break;
case MifareUltralight.TYPE_ULTRALIGHT_C:
break;
}
} else if (techList[i].equals(IsoDep.class.getName())) {
// info[1] = "IsoDep";
IsoDep isoDepTag = IsoDep.get(tag);
} else if (techList[i].equals(Ndef.class.getName())) {
Ndef.get(tag);
} else if (techList[i].equals(NdefFormatable.class.getName())) {
NdefFormatable ndefFormatableTag = NdefFormatable.get(tag);
}
}
}
}
当您获得Exact Tags时,您必须启动该标记的读取过程。 阅读标签完整项目位于My GitHub Repo
答案 1 :(得分:0)
取决于您的TAG类型。超轻型mifare的一个例子
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareUltralight uTag = MifareUltralight.get(tagFromIntent);
uTag.connect(); //You should enclose this into a try-catch because of probably IOException
byte[] data = uTag.readPages(INDEX_OF_PAGES_YOU_WANT); //This returns 4 consecutive pages from the offset you declared. Each page weights 4 bytes
uTag.close();