2014-11-01 83 views
2

我正在使用Apache cordova构建Android应用程序。我用NFC功能进行了申请。我的科尔多瓦应用程序在NFC标签检测后未启动

我们已经将数据写入NFC标签,其中mimetype: myApp/firstNFCApp。在我的应用程序中,只要检测到此标记mimetype,我的应用程序就会读取数据并将数据显示为用户友好的方式。这样,我实现了,它的工作fine.This是我写的,从标签

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> 

,我在androidManifest.xml文件添加到android:noHistory="true"元素activity

我想要什么:

如果设备检测与我的MIME类型的任何标记,要启动的应用程序还需要对触发回调(手段,控制台将打印)。我现在用chariotsolutions/phonegap-nfc插件。

这就是这样,我试过它不工作。任何人都可以帮助我,谢谢你。

回答

1

为了在您的应用程序的整个NDEF消息一起收到一个NFC的意图,你需要定义的是,在上述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

0

正如SweetWisher所写,您需要为您的意图过滤器(android.nfc.action.NDEF_DISCOVERED(在您的情况下)定义适当的操作。此外,您应该意识到意图过滤器中使用的MIME类型必须始终为全小写。原因是根据RFC,MIME类型是不区分大小写的,但是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> 
相关问题