【问题标题】:Android NFC Application detectionAndroid NFC 应用检测
【发布时间】:2014-08-18 05:46:21
【问题描述】:

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

我为此使用了以下代码

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

但它仍然使用其他包名与应用程序通信。

请帮帮我。

【问题讨论】:

标签: android nfc intentfilter ndef


【解决方案1】:

使用 Android 应用程序记录,您只能确保不会因为您的 NDEF 消息而启动其他应用程序。您无法阻止另一个应用程序(当该应用程序位于前台时)接收您发送的 NDEF 消息。您也不能真正阻止您的应用程序接收不适合您的应用程序的 NDEF 消息。但是,您可以显着限制您的应用接收的 NDEF 消息。

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

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

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

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

<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, };

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2018-06-02
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多