我想创建一个NFC SmartPoster,拨打行动记录类型为“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) '.'
};
请帮助..
答案 0 :(得分:3)
当您通过Activity
意图在ACTION_NDEF_DISCOVERED
中收到NDEF消息时,您可以解析并检查具有嵌入式“行为”记录的SmartPoster记录的内容,如下所示:
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
BTW:您会发现问题中的示例消息中存在一些格式错误:Uri记录的第一个字节应为0x81
,文本记录的第一个字节应为{{ 1}}。