[英]Android Read/Write to Multiple Records NDEF NFC
I'm trying to write and read to/from multiple records in a NDEFMessage.我正在尝试在 NDEFMessage 中写入和读取多个记录。 Is my code here right?
我的代码在这里正确吗? Also, my process terminates itself when I'm reading the tag.
此外,当我读取标签时,我的进程会自行终止。 I'm not sure where I went wrong..
我不确定我哪里出错了..
Writing part:写作部分:
private NdefMessage getTagAsNdef() {
String text123="Hello";
//boolean addAAR = true;
String uniqueId = "starbucks.com";
byte[] uriField = uniqueId.getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix
payload[0] = 0x01; //prefixes http://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload
NdefRecord rtdUriRecord = new NdefRecord(
NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
//Wi-FI test writing code
byte[] textbytes = text123.getBytes();
NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
text123.getBytes(), new byte[]{}, textbytes);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// note: returns AAR for different app (couponmanager)
return new NdefMessage(new NdefRecord[] {
rtdUriRecord, textRecord, NdefRecord.createApplicationRecord("com.example.ponpon")
});
} else {
return new NdefMessage(new NdefRecord[] {
rtdUriRecord,textRecord});
}
}
Reading part:阅读部分:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
NdefMessage[] messages = null;
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
messages = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
messages[i] = (NdefMessage) rawMsgs[i];
}
}
if(messages[0] != null) {
String result="";
byte[] payload = messages[0].getRecords()[0].getPayload();
// this assumes that we get back am SOH followed by host/code
for (int b = 1; b<payload.length; b++) { // skip SOH
result += (char) payload[b];
}
//grabbing 2nd payload
String result2="";
byte[] payload2 = messages[0].getRecords()[1].getPayload();
for (int test = 1; test<payload2.length; test++) { // skip SOH
result2 += (char) payload2[test];
Toast.makeText(this,result2,Toast.LENGTH_SHORT).show();
}
You're skipping the first byte ie the H. In the first record you're pre-pending a byte which you correctly skip when reading.您正在跳过第一个字节,即 H。在第一条记录中,您预先准备了一个在阅读时正确跳过的字节。
As for speed I thats just the OS buffering the toasts至于速度,我只是操作系统缓冲吐司
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.