Android NFC-点击发送标签或NDEF信息

Android NFC-点击发送标签或NDEF信息,android,nfc,ndef,Android,Nfc,Ndef,是否可以在没有用户输入的情况下发送NDEF消息 我想在以下场景中使用NFC:用户在NFC阅读器上点击设备。NFC阅读器接收消息作为响应 基本上,我希望设备作为标签运行,即无需用户输入 我知道KitKat 4.4支持HCE(主机卡模拟),但我希望有一个具有更大设备支持的解决方案,如NDEF消息。当Android设备接收到一条NDEF消息(例如,通过读取NFC标签)时,它会通过调度机制对其进行处理,以确定要启动的活动 使用NdefMessage(byte[])从二进制数据构建NDEF消息,或使用Nd

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

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

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


我知道KitKat 4.4支持HCE(主机卡模拟),但我希望有一个具有更大设备支持的解决方案,如NDEF消息。

当Android设备接收到一条NDEF消息(例如,通过读取NFC标签)时,它会通过调度机制对其进行处理,以确定要启动的活动

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

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

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

返回: 一个或多个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);
}
@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);
}