当超过> 1 NdefRecord时,NFC标签为空

时间:2014-05-19 15:25:36

标签: android nfc ndef android-applicationrecord

我是Android的NFC新手,但已成功阅读了应用程序&写入NFC标签。

最初,我在标签上的NdefMessage中有一个NdefRecord,基本上是一些数据。每当我扫描它时,我都成功地从标签中检索数据。

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

当我将应用程序记录引入标记时,每次扫描标记时,我的活动都会由onCreate()onNewIntent()开始/恢复,我会尝试获取Tag,但是它总是为空。这是为什么?

这是我写给标签的内容;

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);
}

AndroidManifest.xml中的我的IntentFilters

 <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 个答案:

答案 0 :(得分:1)

NDEF_DISCOVERED意图只能过滤标记的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         |
+-----------------------------------------------+

这使得application/com.myorg.myapp记录(您在清单中过滤)记录用于意图过滤器匹配。

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

  1. 外部类型名称中的类型名称可以比以“application /".
  2. 开头的MIME类型更紧凑(更少字节)。
  3. 您(由于基于域的命名空间概念)受到注册MIME类型命名冲突的保护。