我刚刚从 google 安装了 Nfc Demo,但它没有从标签中读取信息。-> 它只是提供了一些 fakeTag 信息。有人知道,我可以在哪里更改样本以从 nfc 标签中读取?或者有人为nexus提供了一个工作nfc演示?
如果我们可以将 nfc 演示带入工作,许多人将有可能自己开发 nfc 演示。
最好的问候亚历山大
我在获取标签 ID 时遇到了同样的问题。我有一些 B@2346323143 风格的数据要筛选。我让它像这样工作:
byte[] byte_id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
您需要将 byte[] 转换为十六进制字符串。例如使用以下方法。
private static final byte[] HEX_CHAR_TABLE = { (byte) '0', (byte) '1',
(byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
(byte) '7', (byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
(byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F' };
public static String getHexString(byte[] raw, int len) {
byte[] hex = new byte[2 * len];
int index = 0;
int pos = 0;
for (byte b : raw) {
if (pos >= len)
break;
pos++;
int v = b & 0xFF;
hex[index++] = HEX_CHAR_TABLE[v >>> 4];
hex[index++] = HEX_CHAR_TABLE[v & 0xF];
}
return new String(hex);
}
NfcDemo 有两个部分。有检测器活动,它响应 NFC 标签意图,然后有 FakeTag 活动,它允许您将假标签意图发送到第一部分。但只要启用了 NFC,第一部分也会检测到真正的 NFC 标签。检查设置 -> 无线以查看 NFC 是否已打开。如果是,并且您安装了 NfcDemo,您应该能够检测到 NFC 标签。但是,NfcDemo 仅配置为检测 NDEF 标签,因此如果您有一些其他类型的 NFC 标签(例如 Mifare Classic),您需要获取另一个应用程序,或者修改 NfcDemo 以处理其他 NFC 标签类型。
我编写了一个具有一些基本 NFC 功能的类,希望它可以帮助其他人获得读取一些 NFC 标签的解决方案。
public class StatusMessage extends Activity {
/**
* Returns the Status of the Nfc Device with a String "enabled" or "disabled"
* \return Status NfcDevice
* @author Falkenstein
*
*/
public static String getStatusNfcDevice () {
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter();
if (nfcAdapter.isEnabled()) {
String status = "enabled";
return status;
}
else {
String status = "disabled";
return status;
}
}
/**
* Returns the TagId. Needs an Intent. So you have to get you intent from your "main" activity and give it to the method -> just add the following *lines in your "main class"
*Intent intent =new Intent();
*System.out.println(com.example.StatusMessage.getNfcAdapterExtraID(intent));
*@author Falkenstein
*/
public static String getNfcAdapterExtraID (Intent intent) {
byte[] byte_id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
return byte_id.toString();
}
/**
* Converts a byte to a String.
* @param input
* @return byte
*/
public String byteToStr(byte[] input) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < input.length; i++)
if (input[i] != 0) {
buffer.append( new Character((char)input[i]).toString());
}
return buffer.toString();
}
/**
* Converts a String to a Byte
* @param input
* @return
*/
public byte[] strToByte(String input) {
byte[] buffer = new byte[(input.length()+1)*2];
for (int i = 0; i < buffer.length-2; i = i+2) {
buffer[i] = (byte)input.charAt(i/2);
buffer[i+1] = 0;
}
buffer[buffer.length-2] = 0;
buffer[buffer.length-1] = 0;
return buffer;
}
我已经为 Android 上的 NFC 编写了一些工具,包括一个用于读取和写入真实标签的工作示例项目。我还对您可能感兴趣的 NFCDemo 项目进行了简单的重写。
我还在NFC Developer应用程序中添加了广播发送/接收功能,以便更多人可以玩 NFC,即无需 NFC 设备。