Android NFC应用程序检测

时间:2014-08-18 05:46:21

标签: android nfc intentfilter ndef

我想在我的Android应用程序中使用NFC。我能够使用NFC读写数据。我希望我的应用程序从特定应用程序接收NFC数据,而不是从设备中存在的所有其他应用程序接收。

我使用了以下代码

NdefRecord.createApplicationRecord("com.example.android.beam")

但它会与其他包名称的应用程序通信。

请帮助我。

1 个答案:

答案 0 :(得分:0)

使用Android应用程序记录,您只能确保不会因为您的NDEF消息而启动其他应用程序。你不能阻止另一个应用程序 - 当该应用程序在前台时 - 接收你发送的NDEF消息。您也无法阻止您的应用接收不适合您的应用的NDEF消息。但是,您可以明确地限制应用收到的NDEF消息。

为了限制您的应用应该收到的NDEF消息,您首先要确定要用于过滤的NDEF记录。例如。特定于您的应用的NFC论坛外部类型(请注意,类型名称必须为全小写):

+-----------------------------------------+
| urn:nfc:ext:example.com:mytype | mydata |
+-----------------------------------------+

您可以使用NdefRecord.createExternal("example.com", "mytype", mydata);创建此内容。接下来,您将使用此记录作为NDEF消息的第一个记录。

现在,您可以创建意图过滤器以仅匹配该特定记录。例如。在你的应用程序的主要节日中:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:scheme="vnd.android.nfc"
        android:host="ext"
        android:pathPrefix="/com.example:mytype" />
</intent-filter>

前景调度系统的intent filters参数:

IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
ndef.addDataScheme("vnd.android.nfc");
ndef.addDataAuthority("ext", null);
ndef.addDataPath("/com.example:mytype", PatternMatcher.PATTERN_PREFIX);
IntentFilter[] intentFiltersArray = new IntentFilter[] { ndef, };