Android Nfc Sample Demo - читает только поддельную информацию из тега - PullRequest
2 голосов
/ 22 февраля 2011

Я только что установил демонстрацию Nfc из Google, но он не читает информацию из тега .-> Он просто предоставляет некоторую информацию о поддельном теге.Кто-нибудь есть идея, где я могу изменить образец для чтения из тега NFC?Или у кого-нибудь есть работающая демонстрация NFC для Nexus?

Если бы мы могли запустить демонстрацию NFC, у многих людей была бы возможность разработать демонстрационную версию NFC самостоятельно.

С наилучшими пожеланиямиАлександр

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

У меня была такая же проблема с получением идентификатора тега.Я получил некоторые данные стиля B @ 2346323143 на экран.Я получил это, чтобы работать так:

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

Вам нужно преобразовать byte [] в шестнадцатеричную строку.Например, используя следующий метод.

private static final byte[] HEX_CHAR_TABLE = { (byte) '0', (byte) '1',
        (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
        (byte) '7', (byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
        (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F' };

public static String getHexString(byte[] raw, int len) {
    byte[] hex = new byte[2 * len];
    int index = 0;
    int pos = 0;

    for (byte b : raw) {
        if (pos >= len)
            break;

        pos++;
        int v = b & 0xFF;
        hex[index++] = HEX_CHAR_TABLE[v >>> 4];
        hex[index++] = HEX_CHAR_TABLE[v & 0xF];
    }

    return new String(hex);
}
1 голос
/ 23 февраля 2011

В NfcDemo есть две части.Существует активность детектора, которая реагирует на намерения тега NFC, затем есть операция FakeTag, которая позволяет отправлять намерения поддельного тега в первую часть.Но первая часть также обнаружит реальные теги NFC, если NFC включен.Проверьте в Настройки -> Беспроводная связь, чтобы увидеть, включен ли NFC.Если это так и у вас установлен NfcDemo, вы сможете обнаружить теги NFC.Тем не менее, NfcDemo настроен только на обнаружение тегов NDEF, поэтому, если у вас есть какой-либо другой тип тега NFC (например, Mifare Classic), вам нужно либо получить другое приложение, либо изменить NfcDemo для обработки других типов тегов NFC.

0 голосов
/ 26 ноября 2012

Я написал несколько инструментов для NFC на Android, включая рабочий пример проекта для чтения и записи реальных тегов. Я также сделал простую переписать проекта NFCDemo, который вас может заинтересовать.

Я также добавил возможность широковещательной отправки / приема в приложение NFC Developer , чтобы больше людей могли играть с NFC, т. Е. Без устройства NFC.

0 голосов
/ 01 марта 2011

Я написал класс с некоторой базовой функцией NFC, надеюсь, он поможет кому-то другому найти решение чтения некоторого тега NFC.

public class StatusMessage extends Activity {

/**
 * Returns the Status of the Nfc Device with a String "enabled" or "disabled"
 * \return Status NfcDevice
 * @author Falkenstein
 * 
 */
public static String getStatusNfcDevice () {
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter();
if (nfcAdapter.isEnabled()) { 
    String status = "enabled";

return status;
    }
    else {
        String status = "disabled";
        return status;


    }

}
/**
 * Returns the TagId. Needs an Intent. So you have to get you intent from your "main" activity and give it to the method -> just add the following   *lines in your "main class"
     *Intent intent =new Intent();
    *System.out.println(com.example.StatusMessage.getNfcAdapterExtraID(intent));
 *@author Falkenstein
 */ 
public static String getNfcAdapterExtraID (Intent intent) {
    byte[] byte_id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
    return byte_id.toString();
}


/**
 * Converts a byte to a String.
 * @param input
 * @return byte
 */
public String byteToStr(byte[] input) {
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < input.length; i++)
        if (input[i] != 0) {
            buffer.append( new Character((char)input[i]).toString());
        }
    return buffer.toString();
}



/**
 * Converts a String to a Byte
 * @param input
 * @return
 */ 
public byte[] strToByte(String input) {

    byte[] buffer = new byte[(input.length()+1)*2];
    for (int i = 0; i < buffer.length-2; i = i+2) {

        buffer[i] = (byte)input.charAt(i/2);
        buffer[i+1] = 0;
    }
    buffer[buffer.length-2] = 0;
    buffer[buffer.length-1] = 0;


    return buffer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...