Получение идентификатора оборудования NFC в Android - PullRequest
4 голосов
/ 27 января 2011

Я хочу сделать что-то довольно простое, но я не могу понять, если метод в Gingerbread API предназначен для идентификатора сканируемого токена или аппаратного обеспечения на Nexus S. То, чем я хочу бытьЯ могу получить уникальный идентификатор чипа NFC устройства, чтобы я мог его зарегистрировать (например, когда устройство отказывается от считывателя RFID, я могу связать отказываемое устройство с учетной записью).Возможно ли это с текущими доступными методами API?

Кусок кода, который выглядит наиболее многообещающим (но я не могу проверить, потому что у меня нет устройства) -

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

Ответы [ 3 ]

8 голосов
/ 14 апреля 2011

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;
}
2 голосов
/ 07 марта 2011

В версии 2.3.3 у вас есть класс Tag, и если вы получите этот объект с намерением, вы можете использовать метод getId (),

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

и если вам нужен идентификатор тега из byte [] как«Строка» нужно разбирать с байта на гекс;).

2 голосов
/ 27 января 2011

Намерение 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. Электронная книга О'Рейли - Глава 18

...