1

NdefRecord 中有一个新方法允许将 AndroidApplicationRecord 写入 NdefMessage。这在之前的 Ice-Cream-Sandwich 中不是必需的,但从那时起,如果您想在应用程序中处理来自 NFC 标签的特定 URI(如在意图过滤器中定义),它将不会被传递到您的应用程序,除非您定义那个记录。

createApplicationRecord(String packageName);

这不适用于某种兼容包(我没有找到),但实现相当简单。

首先添加您希望任何 NFC 设备都可以读取的 NdefRecord(请记住,URI 可以用 格式化/缩短URI_PREFIX_MAP

NdefRecord[] nr = new NdefRecord[2];
nr[0] = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], uriBytes);

在下一个地方添加您的 AAR

static final byte[] RTD_ANDROID_APP = "android.com:pkg".getBytes();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    nr[1] = NdefRecord.createApplicationRecord("your.package.name");
else
    nr[1] = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, RTD_ANDROID_APP, new byte[] {}, "your.package.name".getBytes());
4

2 回答 2

1

您不需要 AAR 来处理特定的 URI。AAR 只是另一种确保您的应用程序启动的方法,而不是另一个可以处理相同 URI 的应用程序。

于 2012-01-26T19:40:44.213 回答
0

AAR在 ICS 上保证您的应用收到 NDEF 消息。它也不必是 NDEF 消息中的第一条记录(这是 Intent 过滤器将匹配的内容)。所以它与 Intent 过滤器中的 URI 或 MIME 类型匹配有很大不同。但是,AAR 对 NDEF 记录使用外部类型,这是一种在 ICS 之前不受支持的记录。因此,如果您希望它与 ICS 之前的设备一起使用,通常不应将其用作 NDEF 消息的第一条记录。

于 2012-02-10T22:01:49.197 回答