NFC - 点击发送标签或NDEF消息

时间:2015-05-30 01:34:47

标签: android nfc ndef

是否可以在没有用户输入的情况下发送NDEF消息?

我想在以下场景中使用NFC:用户点击NFC读卡器上的设备。 NFC阅读器接收消息作为响应。

基本上我希望设备作为标签运行,即无需用户输入。

我知道KitKat 4.4支持HCE(主机卡仿真),虽然我喜欢具有更强设备支持的解决方案,例如NDEF消息。

1 个答案:

答案 0 :(得分:1)

当Android设备收到 NDEF 消息(,例如通过阅读NFC标记)时,它会通过调度机制处理它以确定要启动的活动。

使用NdefMessage(byte[])从二进制数据构建 NDEF消息,或NdefMessage(NdefRecord[])从构建一个或多个NdefRecords。

消息中第一条记录的类型对于消息发送具有特殊重要性,因此请仔细设计此记录。 在此NDEF消息中获取NDEF记录。

NdefMessage 始终具有一个或多个NDEF记录:因此,以下用于检索第一条记录的代码始终是安全的(无需检查是否为null或数组长度> = 1):

 NdefRecord firstRecord = ndefMessage.getRecords()[0];

返回: 一个或多个NDEF记录的数组。

在两个Android设备上使用Beam无法实现单击式方法

  

请注意,对于其他设备,特别是如果一个是Android和一个   是专用的NFC阅读器或可以控制NFC的设备   低级别的功能或模拟NFC标签的设备。

但是,两个Android设备之间可以采用双击方式,只需对现有方案进行少量修改。

您只需添加一个拦截传入的NDEF邮件的前台调度,从而阻止Android重新启动您的活动:

@Override
public void onResume() {
    super.onResume();
    NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
    PendingIntent pi = PendingIntent.getActivity(
            this,
            0,
            new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),
            0);
    adapter.enableForegroundDispatch(this, pi, null, null);
}