2011-01-27 40 views
3

我想做一些相當直接的事情,但我無法弄清楚薑餅API中的方法是用於掃描令牌的ID還是Nexus上的硬件S.我想要做的是獲得設備的NFC芯片的唯一標識符,以便我可以註冊它(例如,當設備通過RFID閱讀器被放棄時,我可以將設備放棄帳戶)。這可能與目前的API方法可用?在Android中獲取NFC硬件ID

的一段代碼,看起來最有前途的(但我無法測試,因爲我沒有一個設備)

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

回答

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

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

+0

雖然是得到了設備發現的標籤,它似乎並沒有瞭解車載NFC硬件的詳細信息。任何方式來做到這一點? – Matt 2011-01-28 06:58:00

+0

爲什麼不使用設備的IMEI或MEID?他們被認爲是獨一無二的,你可以註冊他們。 – Lior 2011-01-29 10:37:55

+0

因爲當讀取器掃描設備的NFC令牌時,信息不會被傳送(但是這可能會比獲取設備的NFC令牌更快地進入Android) – Matt 2011-01-30 09:53:06

2

在版本2.3.3你有一流的標籤,如果你會得到對象弗朗的意圖,你可以使用方法的getId(),

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

,如果你從字節[]作爲需要標籤ID 「字符串」你必須解析它從字節到十六進制;)。

7

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