当前位置: 首页 > 知识库问答 >
问题:

当超过1条NdefRecord时,NFC标记为空

上官鸿祯
2023-03-14

我是一个新手在NFC在Android上,但已设法有一个应用程序阅读

最初,我在标签上的NdefMessage中有一条NdefRecord,基本上是一些数据。无论何时扫描,我都能成功地从标签中检索数据。

然后我想添加一个应用程序记录,这样,如果用户扫描了我的标签,但没有我的应用程序,他们就会被重定向到PlayStore。

当我将应用程序记录引入标记时,每次通过onCreate()onNewIntent()扫描标记时,我都会尝试获取标记,但它总是空的。这是为什么?

这是我写在标签上的内容;

Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);      
NdefRecord appRecord = NdefRecord.createApplicationRecord("com.myorg.myapp");
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
        new String("application/com.myorg.myapp")
        .getBytes(Charset.forName("US-ASCII")),
        null, "StringData".getBytes());
NdefMessage message = new NdefMessage(new NdefRecord[] { appRecord, record });
if (writeTag(message, detectedTag)) {
Toast.makeText(this, "Success: Wrote placeid to nfc tag", Toast.LENGTH_LONG).show();
} 

这里是我阅读标签的地方(在onCreate()onNewIntent()中);

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if(tag!=null) {
    readTag(tag);
}

我的意图过滤器在Androidanifest.xml

 <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <data android:mimeType="application/com.myorg.myapp" />
                <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>

共有1个答案

壤驷志学
2023-03-14

NDEF_发现的意图只能过滤标记的NDEF消息中第一条记录的类型。您的NDEF消息如下所示:

+-----------------------------------------------+
| EXT:android:com:pkg | com.myorg.myapp         |
+-----------------------------------------------+
| MIME:application/com.myorg.myapp | StringData |
+-----------------------------------------------+

因此,您需要修改您的意图过滤器,使其对外部类型android: com: pkg敏感。或者,您将Android应用程序记录(AAR)移动到NDEF消息的末尾(这是首选方式):

NdefMessage message = new NdefMessage(new NdefRecord[] { record, appRecord });

由此产生了以下信息:

+-----------------------------------------------+
| MIME:application/com.myorg.myapp | StringData |
+-----------------------------------------------+
| EXT:android:com:pkg | com.myorg.myapp         |
+-----------------------------------------------+

这使得应用程序/com.myorg.myapp记录(在清单中筛选)成为用于意图筛选器匹配的记录。

最后,我强烈建议您使用NFC Forum外部类型,而不是使用自定义MIME类型。这将有两个好处:

  1. 外部类型名中的类型名可以比以“application/”开头的MIME类型更紧凑(字节更少)
 类似资料:
  • 问题内容: 我刚开始学习Kubernetes。我已经通过Kubernetes YUM存储库安装了带有SELinux禁用的kubectl,kubeadm和kubelet的CentOS 7.5。 但是,当我要启动命令时。我收到此错误消息: 根据Linux Foundation课程,我不需要执行更多命令即可将第一个启动集群创建到VM中。 错误? Firewalld确实有进入防火墙的开放端口。6443 /

  • 我正在开发spring-mvc应用程序。 我需要处理超过10万条数据记录。我不能让它依赖于数据库,所以我必须用java实现所有逻辑。 目前,我正在创建多个线程,并将1000条记录分配给每个要处理的线程。 我正在使用org。springframework。行程安排。同时发生的ThreadPoolTaskExecutor(线程池任务执行器)。 列表项 问题: 建议使用的线程数 我应该在线程之间平均分配

  • 首先,我想说的是,我有一个Firebase动态链接的完整工作实现。假设我们有以下动态url:https://cardition.page.link/fYvz6CU61p1DXHud8 当被(如果你安装了应用程序,它会打开应用程序并向其传递一些id以识别资源,否则它会将你带到其PlayStore页面,等等……) 然而,我在NFC标签上写了相同的网址,我想象它会表现得一样(基本上系统的默认浏览器会尝试

  • 我正在尝试使用Java开发2D游戏。到目前为止,我已经设法将游戏设置为使用全屏独占模式,并在自定义线程中进行活动渲染。我决定使用的游戏循环是固定时间步长变量渲染类型。这种类型的游戏循环应该尽可能快地渲染设备可以处理,我对此并不完全满意。所以我试图使用来限制帧速率。 如果我关闭所有渲染,并简单地在游戏循环中更新游戏,< code>Thread.sleep(1)大约在< code>1 ms内成功Hib

  • 我一直在开发一个应用程序,它使用NFC标签做一些魔术。 一切都很好,直到最近,我改变了一些代码,这些代码与之前一直有效的NFC代码无关。 当我通过NFC点击启动我的应用程序时,所有的工作,当我点击应用程序运行时,我将在onNewIntent()中收到未来的NFCTag。 当我通过图标启动应用程序并在应用程序运行时尝试点击时,会调用onNewIntent()方法,但当我试图从intent中获取额外的

  • 我有一个小项目要将数据写入Ntag 213、215和216。 我成功地使用MifareUltraLight方法写入数据。问题是当我使用 NfcTools 扫描时,数据格式与我预期的不同。 这是我期望的格式。 这是我得到的格式。 我希望当Ntag扫描时,如果没有安装应用程序,它会打开浏览器。 我使用Mi的方法,因为N标签将受密码保护。我尝试了两种不同的方式来写入数据。 > 我使用命令N瘤手动处理写入