我正在使用Apache cordova
来构建Android应用程序。我使用NFC
功能创建了一个应用程序。
我们已使用mimetype: myApp/firstNFCApp
将数据写入NFC标记。在我的应用程序内部每当使用此mimetype
我的应用程序检测标记时,将读取数据并以用户友好的方式显示该数据。这样我实现了,它运行正常。这是我为从标记中获取数据而编写的代码
nfc.addNdefListener(
function(nfcEvent){
console.log(nfc.bytesToString(nfcEvent.tag.ndefMessage[0].payload));
},
function(){
console.log("sucessfully created");
},
function(){
console.log("something went wrong");
}
);
现在,只要设备检测到mimetype: myApp/firstNFCApp
的标记,我就想启动我的应用程序。为此,我写了以下代码
<intent-filter>
<data android:mimeType="myApp/firstNFCApp" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
我将android:noHistory="true"
添加到activity
文件中的androidManifest.xml
元素。
我想要的是什么:
如果设备检测到任何带有我的mimetype的标签,想要启动应用程序还需要触发该回调(意味着,控制台将打印)。我正在使用chariotsolutions/phonegap-nfc
插件。
这是方式,我试过它不工作。谁能帮我谢谢你。
答案 0 :(得分:1)
为了在您的应用中接收NFC意图以及整个NDEF消息,您需要定义与上述NDEF消息中的第一条记录匹配的正确意图过滤器:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
答案 1 :(得分:0)
正如SweetWisher所写,你需要为你的意图过滤器定义一个适当的动作(android.nfc.action.NDEF_DISCOVERED
(在你的情况下。另外,你应该知道NDEF_DISCOVERED
意图过滤器中使用的MIME类型必须始终是全小写的。原因是MIME类型根据RFC不区分大小写,但Android的意图过滤器匹配区分大小写。因此,Android会将MIME类型转换为全小写匹配以克服区分大小写的问题(请参阅this answer for a more detailed explaination)。
因此,您的意图过滤器看起来像这样:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="myapp/firstnfcapp" />
</intent-filter>