我的cordova应用程序在NFC标签检测后未启动

时间:2014-11-01 10:43:22

标签: android cordova phonegap-plugins nfc ndef

我正在使用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插件。

这是方式,我试过它不工作。谁能帮我谢谢你。

2 个答案:

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

Refer how to handle NFC

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