如何通过 NFC 将文本字符串发送到另一台设备?
How can I send a text string to another device via NFC?
我想创建一个迷你应用程序来读取 NFC 标签,然后发送到 Android 上的另一台设备。那部分已经完成,我可以读取标签,我可以在 EditText 上打印字符串。但我也想将我从该标签读取的文本发送到具有 NFC 的另一台设备。我该怎么做?
//I have this code here when a tag is discovered...
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {
String result = "";
result = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
myTag = result;
txtTag.setText(myTag);
}
}
如何通过 NFC 将文本字符串发送到另一台设备?
你想做的事 Android 根本不可能,不(将来可能不会)。
您当前读取的防冲突标识符(UID、PUPI 或您读取的特定标签平台的任何名称):
result = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
防冲突标识符是非常低的协议层的一部分。虽然 Android 确实支持基于主机的卡模拟(参见 Android HCE),但 Android API 无法控制诸如 UID 之类的低级参数。通常,也无法更改 NFC 标签上的信息。
请注意,如果您的标签还包含一些 NDEF 格式的高级数据,您可以使用以下方法获取:
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = null;
if ((rawMsgs != null) && (rawMsgs.length > 0)) {
msg = (NdefMessage)rawMsgs[0];
}
if (msg != null) {
// do something with the received message
}
Android 确实支持将这些 NDEF 消息存储在(可写)NFC 标签上,它还支持将 NDEF 消息发送到其他 NFC 设备(参见 Beaming NDEF Messages to Other Devices)。
例如要在 NFC 标签上存储 NDEF 消息,您可以使用:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
try {
ndef.connect();
ndef.writeNdefMessage(msg);
} finally {
ndef.close();
}
} else {
NdefFormatable ndefFormatable = NdefFormatable.get(tag);
if (ndefFormatable != null) {
try {
ndefFormatable.connect();
ndefFormatable.format(message);
} finally {
ndefFormatable.close();
}
}
}
或者为了通过对等模式(Android Beam)将消息发送到另一个 NFC 设备,您可以使用:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.setNdefPushMessage(msg, this);
我想创建一个迷你应用程序来读取 NFC 标签,然后发送到 Android 上的另一台设备。那部分已经完成,我可以读取标签,我可以在 EditText 上打印字符串。但我也想将我从该标签读取的文本发送到具有 NFC 的另一台设备。我该怎么做?
//I have this code here when a tag is discovered...
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {
String result = "";
result = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
myTag = result;
txtTag.setText(myTag);
}
}
如何通过 NFC 将文本字符串发送到另一台设备?
你想做的事 Android 根本不可能,不(将来可能不会)。
您当前读取的防冲突标识符(UID、PUPI 或您读取的特定标签平台的任何名称):
result = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
防冲突标识符是非常低的协议层的一部分。虽然 Android 确实支持基于主机的卡模拟(参见 Android HCE),但 Android API 无法控制诸如 UID 之类的低级参数。通常,也无法更改 NFC 标签上的信息。
请注意,如果您的标签还包含一些 NDEF 格式的高级数据,您可以使用以下方法获取:
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = null;
if ((rawMsgs != null) && (rawMsgs.length > 0)) {
msg = (NdefMessage)rawMsgs[0];
}
if (msg != null) {
// do something with the received message
}
Android 确实支持将这些 NDEF 消息存储在(可写)NFC 标签上,它还支持将 NDEF 消息发送到其他 NFC 设备(参见 Beaming NDEF Messages to Other Devices)。
例如要在 NFC 标签上存储 NDEF 消息,您可以使用:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); Ndef ndef = Ndef.get(tag); if (ndef != null) { try { ndef.connect(); ndef.writeNdefMessage(msg); } finally { ndef.close(); } } else { NdefFormatable ndefFormatable = NdefFormatable.get(tag); if (ndefFormatable != null) { try { ndefFormatable.connect(); ndefFormatable.format(message); } finally { ndefFormatable.close(); } } }
或者为了通过对等模式(Android Beam)将消息发送到另一个 NFC 设备,您可以使用:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); nfcAdapter.setNdefPushMessage(msg, this);