我是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>
答案 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类型。这有两个好处: