Как вы читаете уникальный идентификатор тега NFC на Android?

Tag myTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.i("tag ID", myTag.getId().toString());

Это дает мне идентификатор типа "[B @40521c40", но этот идентификатор изменяется каждый раз.

Любая помощь будет принята с благодарностью.

Спасибо.

Ответ 1

вам все равно нужно преобразовать байт в строку:

private String bytesToHexString(byte[] src) {
    StringBuilder stringBuilder = new StringBuilder("0x");
    if (src == null || src.length <= 0) {
        return null;
    }

    char[] buffer = new char[2];
    for (int i = 0; i < src.length; i++) {
        buffer[0] = Character.forDigit((src[i] >>> 4) & 0x0F, 16);  
        buffer[1] = Character.forDigit(src[i] & 0x0F, 16);  
        System.out.println(buffer);
        stringBuilder.append(buffer);
    }

    return stringBuilder.toString();
}

Ответ 2

Я столкнулся с подобной проблемой и смог ее решить. Проблема заключается в преобразовании в строку.

myTag.getId() возвращает массив байтов. Вы должны преобразовать эти байты в шестую строку. Я использовал следующую функцию, которую я нашел здесь, в stackoverflow.com

    final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    int v;
    for ( int j = 0; j < bytes.length; j++ ) {
        v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}