【问题标题】:How can I send a text string to another device via NFC?如何通过 NFC 将文本字符串发送到另一台设备?
【发布时间】:2016-09-20 12:46:58
【问题描述】:

我想创建一个迷你应用来读取 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 tags nfc nfc-p2p android-beam


    【解决方案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 设备(请参阅Beaming NDEF Messages to Other Devices)。

    • 例如将 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);
      

    【讨论】:

    • 感谢您的回答。我将按照您的结构进行操作,所以我有一个问题...我应该在我要发送字符串的设备上安装这个应用程序吗?
    • 是的,您还需要一个应用程序作为接收器。如果没有特定的应用程序,Android 将不知道如何处理数据。
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多