编程语言
首页 > 编程语言> > android – 如何仅允许与运行相同应用程序/活动的设备进行NFC交互

android – 如何仅允许与运行相同应用程序/活动的设备进行NFC交互

作者:互联网

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

问题

目前,如果我使用的设备A已打开Chrome且设备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消息.也许有办法等待回复?

解决方法:

你不能.读取器(标签)/接收器(对等)侧确定哪个应用程序处理NFC事件.在Android上,这是由intent过滤器,前台调度系统和reader-mode API完成的.通过后两者,前台活动可以始终请求优先于所有其他应用程序.你无法阻止这一切.此外,Android(Android Beam)上的点对点模式本质上只允许单向消息交换,因此您不会真正执行任何握手.

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

>使用加密来呈现您通过NFC发送的数据不适用于任何不知道解密密钥的接收应用.
>在另一侧的HCE一侧使用读卡器模式.这样,您可以执行一些握手,建立经过身份验证的通道等.通过使用您自己的HCE端应用程序标识符,您可以降低其他应用程序甚至尝试访问您的应用程序的可能性.

标签:android,android-5-0-lollipop,nfc,android-beam,nfc-p2p
来源: https://codeday.me/bug/20190706/1399365.html