android - 如何只允许 NFC 与运行相同应用程序/Activity 的设备进行交互

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

我有一个使用 NFC 的应用程序。我想将 NFC 交互限制在与我的应用程序处于同一 Activity 中的其他设备。

问题

目前,如果我使用的设备A 已打开 Chrome,而我的设备B 正在运行我的应用程序,那么 Chrome 仍会检测到我的应用程序发送的数据近场通信。

我怎么能说“如果你没有运行我的应用程序,那么你就不能与我进行 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;
}

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

最佳答案

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

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

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

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

关于android - 如何只允许 NFC 与运行相同应用程序/Activity 的设备进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910696/

相关文章:

android - 在使用 Android MediaPlayer 播放音频之前添加延迟

java - 致命异常(java.lang.IllegalStateException)

android - 如何正确清理 Android 监听器?

安卓/NFC : Get Tag in onCreate() without new Intent

c - 重新编译探索 NFC 时出错

Android Lollipop、AppCompat ActionBar 自定义 View 不占用整个屏幕宽度

android.process.acore 已停止工作

android - 将 MenuItem 添加到其他应用程序选项/操作菜单 (Android)

android - Android 和 Ios 手机内的程序 NFC 卡

notifications - 设置音频属性音量