我有一个使用 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) 上的点对点模式本质上只允许单向消息交换,因此您不会真正执行任何握手。
虽然不会直接阻止其他应用与您的应用通信,但还是有一些选择:
使用加密使您通过 NFC 发送的数据无法用于任何不知道解密 key 的接收应用。
一方面使用阅读器模式,另一方面使用 HCE。这样,您就可以执行一些握手、建立经过身份验证的 channel 等。通过在 HCE 端使用您自己的应用程序标识符,您可以降低其他应用程序尝试访问您的应用程序的可能性。
我是一名优秀的程序员,十分优秀!