在Android中获取NFC硬件ID

时间:2011-01-27 11:26:32

标签: android nfc

我想做一些相当简单的事情,但如果Gingerbread API中的方法是针对正在扫描的令牌的ID或Nexus S上的硬件,我无法解决。我想成为什么样的人能够做到的是获得设备的NFC芯片的唯一标识符,因此我可以注册它(例如,当通过RFID阅读器放弃设备时,我可以将被放弃的设备与账户相关联)。这可以使用当前的API方法吗?

看起来最有希望的代码(但我无法测试,因为我没有设备)是

byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);

4 个答案:

答案 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

  1. 要处理此类意图,您必须为此操作android.nfc.action.TAG_DISCOVERED添加一个意图过滤器:

    < action android:name="android.nfc.action.TAG_DISCOVERED"/>
    < category android:name="android.intent.category.DEFAULT"/>
    
  2. 添加适当的权限:

    < uses-permission android:name="android.permission.NFC" />
    
  3. 仅将您的应用程序限制为支持的设备:

    < uses-sdk android:minSdkVersion="9" />  
    < uses-feature android:name="android.hardware.nfc" />
    
  4. 处理意图时,您可以调用建议的代码:

    byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
    NdefMessage[] msgs = (NdefMessage[]) intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    
  5. 欲了解更多信息,请访问:

    1. OpenIntents

    2. 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 芯片的唯一标识符”不存在。没有明显的理由为什么有人会需要它。