我想创建一个迷你应用程序,只是为了阅读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将文本字符串发送到其他设备?
答案 0 :(得分:1)
你想要做的事情根本不可能用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支持在(可写)NFC标签上存储这些NDEF消息,并且还支持将NDEF消息发送到其他NFC设备(请参阅Beaming NDEF Messages to Other Devices)。
E.g。将NDEF消息存储在您可以使用的NFC标签上:
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);