【问题标题】:Getting the NFC Hardware ID In Android在 Android 中获取 NFC 硬件 ID
【发布时间】:2011-01-27 11:26:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: android nfc


    【解决方案1】:

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

    【讨论】:

    • 我没有要测试的标签,但你为什么不使用: byte[] rawTagId = getIntent() .getByteArrayExtra(NfcAdapter.EXTRA_ID); String tagId = new String(rawTagId);
    【解决方案2】:

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

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

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

    【讨论】:

    • 我没有要测试的标签,但你为什么不使用: byte[] rawTagId = getIntent() .getByteArrayExtra(NfcAdapter.EXTRA_ID); String tagId = new String(rawTagId);
    【解决方案3】:

    intent 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. OpenIntents

    2. O'Reilly 的 online book - 第 18 章

    【讨论】:

    • 虽然获得了设备发现的标签,但似乎并没有获得板载 NFC 硬件的详细信息。有什么办法吗?
    • 为什么不使用设备的 IMEI 或 MEID?它们被认为是独一无二的,您可以注册它们。
    • 因为当设备的 NFC 令牌被读取器扫描时,信息不会被传输(但这是比获取设备的 NFC 令牌更早进入 Android 的方式)
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多