【问题标题】:How to only allow NFC interaction with devices that have the same application/activity running如何只允许 NFC 与运行相同应用程序/活动的设备交互
【发布时间】:2015-11-01 20:15:57
【问题描述】:

我有一个使用 NFC 的应用程序。我想将 NFC 交互限制在与我的应用程序进行相同活动的其他设备上。

问题

目前,如果我使用已打开 Chrome 的设备 A 并且我的设备 B 运行我的应用程序,那么 Chrome 仍会检测到我的应用程序发送的数据NFC。

我怎么能说“如果你没有运行我的应用程序,那么你就不能与我进行 NFC 交互”?

@Override
public NdefMessage createNdefMessage(NfcEvent event)
{
    String stringOut = getMacAddress(this);
    byte[] bytesOut = stringOut.getBytes();

    NdefRecord ndefRecordOut = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "text/plain".getBytes(), new byte[] {}, bytesOut);

    NdefMessage ndefMessageOut = new NdefMessage(ndefRecordOut);

    return ndefMessageOut;
}

在上面的代码中,无论其他设备有什么活动,我都会发送 NFC 消息。也许有办法等待回复?

【问题讨论】:

    标签: android nfc android-5.0-lollipop nfc-p2p android-beam


    【解决方案1】:

    你不能。读取器(标签)/接收器(点对点)端决定了哪个应用程序处理 NFC 事件。在 Android 上,这是由意图过滤器、前台调度系统和阅读器模式 API 完成的。通过后两者,前台活动可能总是要求优先于所有其他应用程序。你无法阻止这种情况发生。此外,Android 上的点对点模式 (Android Beam) 本质上只允许单向消息交换,因此您不会真正执行任何握手。

    虽然不会直接阻止其他应用与您的应用通信,但还是有一些选择:

    1. 使用加密使您通过 NFC 发送的数据无法用于任何不知道解密密钥的接收应用程序。

    2. 在一侧使用阅读器模式 + 在另一侧使用 HCE。这样,您可以执行一些握手、建立经过身份验证的通道等。通过在 HCE 端使用您自己的应用程序标识符,您可以降低其他应用程序甚至尝试访问您的应用程序的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2015-06-19
      • 2017-07-01
      相关资源
      最近更新 更多