4

我想做一些相当简单的事情,但是如果 Gingerbread API 中的方法是针对正在扫描的令牌的 ID 还是针对 Nexus S 上的硬件,我不太清楚。我希望能够做什么是获取设备的 NFC 芯片的唯一标识符,因此我可以注册它(例如,当设备通过 RFID 阅读器豁免时,我可以将被豁免的设备与帐户相关联)。这可以使用当前可用的 API 方法吗?

看起来最有前途的一段代码(但我无法测试,因为我没有设备)是

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

4 回答 4

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;
}
于 2011-04-13T20:01:50.263 回答
2

NfcAdapter.ACTION_TAG_DISCOVERED发现标签时,NFC 控制器将自动分派意图。

  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);
    

欲了解更多信息,请访问:

  1. 开放意图

  2. O'Reilly 的在线书籍- 第 18 章

于 2011-01-27T12:27:07.973 回答
2

在 2.3.3 版中,您有类 Tag,如果您从意图中获得该对象,您可以使用方法 getId(),

Tag myTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

如果您需要将 byte[] 中的标签 id 作为“String”,则必须将其从字节解析为十六进制;)。

于 2011-03-07T07:03:48.680 回答
0

我很确定“设备 NFC 芯片的唯一标识符”不存在。没有明显的理由说明任何人都需要它。

于 2021-08-10T08:05:06.170 回答