我想做一些相当简单的事情,但如果Gingerbread API中的方法是针对正在扫描的令牌的ID或Nexus S上的硬件,我无法解决。我想成为什么样的人能够做到的是获得设备的NFC芯片的唯一标识符,因此我可以注册它(例如,当通过RFID阅读器放弃设备时,我可以将被放弃的设备与账户相关联)。这可以使用当前的API方法吗?
看起来最有希望的代码(但我无法测试,因为我没有设备)是
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
答案 0 :(得分:8)
tagId设置为一个字节数组。您需要将该数组解析为十六进制字符串。有很多方法可以做到这一点,但是这段代码可以在不使用外部库的情况下完成,而且很容易看出发生了什么:
String ByteArrayToHexString(byte [] inarray)
{
int i, j, in;
String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
String out= "";
for(j = 0 ; j < inarray.length ; ++j)
{
in = (int) inarray[j] & 0xff;
i = (in >> 4) & 0x0f;
out += hex[i];
i = in & 0x0f;
out += hex[i];
}
return out;
}
答案 1 :(得分:2)
当发现标记时,NFC控制器将自动调度意图NfcAdapter.ACTION_TAG_DISCOVERED
。
要处理此类意图,您必须为此操作android.nfc.action.TAG_DISCOVERED
添加一个意图过滤器:
< action android:name="android.nfc.action.TAG_DISCOVERED"/>
< category android:name="android.intent.category.DEFAULT"/>
添加适当的权限:
< uses-permission android:name="android.permission.NFC" />
仅将您的应用程序限制为支持的设备:
< uses-sdk android:minSdkVersion="9" />
< uses-feature android:name="android.hardware.nfc" />
处理意图时,您可以调用建议的代码:
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
NdefMessage[] msgs = (NdefMessage[]) intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
欲了解更多信息,请访问:
O'Reilly的online book - 第18章
答案 2 :(得分:2)
在版本2.3.3中你有类Tag,如果你得到那个对象fron intent你可以使用方法getId(),
Tag myTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
如果你需要将byte []中的标记id作为“String”,你必须将它从字节解析为十六进制;)。
答案 3 :(得分:0)
我很确定“设备的 NFC 芯片的唯一标识符”不存在。没有明显的理由为什么有人会需要它。