【问题标题】:NFC - Send tag or NDEF message on TapNFC - 点击时发送标签或 NDEF 消息
【发布时间】:2015-05-30 01:34:46
【问题描述】:

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

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

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

我知道 KitKat 4.4 支持 HCE(主机卡仿真),但我想要一个具有更大设备支持的解决方案,例如 NDEF 消息。

【问题讨论】:

    标签: android nfc ndef


    【解决方案1】:

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

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

    消息中第一条记录的类型对于消息的分发具有特殊的意义,所以要仔细设计这条记录。 获取此 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多