NFC Smartposter для набора номера - PullRequest
0 голосов
/ 31 марта 2012

Я хочу создать NFC SmartPoster, который набирает номер с типом записи действия "act".Может кто-нибудь сказать, как получить Action Record типа "act" в Android из пакета и проверить, содержит ли пакет Action Record тип "act" или нет.Ниже приведен пакет, который я создал.

/**
 * Smart Poster containing a Telephone number and Action record type.
 */

public static final byte[] SMART_POSTER_Dial_Number =
    new byte[] {
    // SP type record
    (byte) 0xd1, (byte) 0x02, (byte) 0x26, (byte) 0x53, (byte) 0x70,
 // Call type record
    (byte) 0xd1, (byte) 0x01, (byte) 0x0e, (byte) 0x55, (byte) 0x05, (byte) 0x2b,
    (byte) 0x39, (byte) 0x31, (byte) 0x38, (byte) 0x38, (byte) 0x37, (byte) 0x32,
    (byte) 0x37, (byte) 0x34, (byte) 0x33, (byte) 0x39, (byte) 0x33, (byte) 0x39, 

    // Action type record
    (byte) 0x11, (byte) 0x03, (byte) 0x01, (byte) 0x61, (byte) 0x63, (byte) 0x74,
    (byte) 0x00,
 // Text type record with 'T'
    (byte) 0x91, (byte) 0x01, (byte) 0x09, (byte) 0x54, (byte) 0x02, (byte) 'C',
    (byte) 'a', (byte) 'l', (byte) 'l', (byte) 'i', (byte) 'n', (byte) 'g', (byte) '.'


     };

Пожалуйста, помогите ..

1 Ответ

3 голосов
/ 31 марта 2012

Когда вы получаете сообщение NDEF в вашем Activity с намерением ACTION_NDEF_DISCOVERED, вы можете проанализировать и проверить содержимое записи SmartPoster со встроенной записью 'act' следующим образом:

Intent intent = getIntent();
final Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage mesg = (NdefMessage) rawMsgs[0]; // in theory there can be more messages

// let's inspect the first record only
NdefRecord[] record = mesg.getRecords()[0];
byte[] type = record.getType();

// check if it is a SmartPoster
byte[] smartPoster = { 'S', 'p'};
if (Arrays.equals(smartPoster, type) {
  byte[] payload = record.getPayload();

  // try to parse the payload as NDEF message
  NdefMessage n;
  try {
    n = new NdefMessage(payload);
  } catch (FormatException e) {
    return; // not an NDEF message, we're done
  }

  // try to find the 'act' record
  NdefRecord[] recs = n.getRecords();
  byte[] act = { 'a', 'c', 't' };
  for (NdefRecord r : recs) {
    if (Arrays.equals(act, r.getType()) {
      ... // found it; do your thing!
      return;
    }
  }
}
return; // nothing found 

Кстати: в примере сообщения в вашем вопросе вы обнаружите пару ошибок форматирования: первый байт записи Uri должен быть 0x81, а первый байт текстовой записи - 0x51.

...