Как я могу отправить текстовую строку на другое устройство через 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?
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 поддерживает хранение этих сообщений NDEF на (доступных для записи) тегах NFC, а также поддерживает отправку сообщений NDEF другим устройствам NFC (см. Передача сообщений NDEF другим устройствам).
Например, чтобы сохранить сообщение 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(); } } }
Или для отправки сообщения на другое устройство NFC через одноранговый режим (Android Beam) вы можете использовать:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); nfcAdapter.setNdefPushMessage(msg, this);