NFC标记扫描仅触发我的应用启动

时间:2014-12-10 09:39:25

标签: android nfc

我有一个扫描NFC标签的应用程序,从标签收集数据并将该数据发送到服务器。标签上的数据采用以下格式:

1,3,30012,somebodys name

这些标签放在客户的房子里供护理人员扫描。每次扫描都会将其记录到一个电话中。

到目前为止一直运作良好。我现在遇到的问题是护理人员必须在我们的应用程序旁边使用另一个应用程序,该应用程序扫描不同的NFC标签,其上有不同的数据并将其发送到不同的服务器。此应用程序安装在同一个看护人的手机上。

此其他应用将按以下格式扫描可能包含数据的NFC标签:

abc|123??

问题是如何确保当护理者扫描我们的标签时,我们的应用程序才会启动?

在我的应用的intent-filters中,是否有一种方法可以指明这个?

这就是我的活动清单中的内容。我了解如果启动了Intent并且有2个应用程序可以处理NFC标签,则会向用户显示一个列表。 Android文档不鼓励这样做。

提前致谢。

[编辑] 有一点我注意到,如果手机在主屏幕上,我扫描标签,那么我的应用程序就会启动。如果护理者扫描正确的标签,这很好。

<activity android:name=".NfcscannerActivity"
    android:screenOrientation="portrait" >
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.carefreegroup.rr3.QRCODE_ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data
        android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/nfc_tech_filter" />
</activity>

1 个答案:

答案 0 :(得分:2)

您可以在NDEF消息中创建自定义mimeType,然后创建一个与其完全匹配的intent-filter。这意味着您的应用将会启动,因为它是最具体的过滤器。

示例:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="application/vnd.com.my.app.package.customString" />
</intent-filter>

编辑: 或者,如果您无法创建自定义mimeType,那么您的实用程序可能会创建自定义URL吗?然后,您可以为自定义网址创建过滤器:

<intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:scheme="http"
                android:host="www.mywebsite.net" 
                android:path="/customPathForAction" />
</intent-filter>