【问题标题】:Nexus 4 - NFC AAR and FilterNexus 4 - NFC AAR 和过滤器
【发布时间】:2013-02-02 12:28:51
【问题描述】:

我正在使用 NFC 论坛中指定的 Wifi 保护设置配置在标签上编写静态切换选择记录。 (SSID、加密……)。

类型是application/vnd.wfa.wsc

此外,我将 Android 应用程序记录作为最后一个 NDEF 记录添加到我的 NDEF 消息中。

我还在我的 Android 清单 XML 中定义了一个过滤器,用于发现 NFC 标签。

问题是:如果启动了应用程序并显示了 Reader Activity,我可以读取标签并且一切正常。

现在我想要以下内容: 如果我扫描我的标签,并且活动不是@foreground 或未启动,则应用程序应自行启动并自动切换到阅读器模式。

  1. 如果我这样做了,AAR 不会启动 Nexus 4... 如果我将此记录放在 NDEF 消息的第一位,它只是开始,但随后我失去了 Ndef/Tech 的事件/发现标签。
  2. 我的 android 清单中也有过滤器,但这似乎没有任何作用,我尝试了所有三个事件但没有任何反应

另外,如果标签被扫描,通常如果更多应用程序正在过滤事件,我会得到一个应用程序选择器,我想为这个标签启动哪个应用程序。但是我的应用程序没有在这里列出。

这就是我创建消息的方式:

new NdefMessage(new NdefRecord[] { Utils.createHandoverSelectRecord(ac_record.toByteArray()), wpsRecord, aarRecord });

这是我的 android 清单中的过滤器:

  <activity android:name=".activities.NFCWriterActivity"></activity>
        <activity android:name=".activities.NFCReaderActivity" android:exported="true" android:permission="android.permission.NFC">
            <intent-filter>
              <action android:name="android.nfc.action.TAG_DISCOVERED"/>
              <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>        
        </activity>
        <activity android:name=".activities.NFCBeamActivity"></activity>
        <activity android:name=".activities.WifiManagerActivity"></activity>
        <activity android:name=".activities.WifiConfiguratorActivity"></activity>
        <activity android:name=".activities.TagWriterOptionsActivity"></activity>
        <activity android:name=".activities.WifiScannerTagActivity"></activity>
        <activity android:name=".activities.WifiScannerActivity"></activity> 
        <activity android:name=".activities.WifiListActivity"></activity>  

        <activity
            android:name=".activities.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
              <action android:name="android.nfc.action.TAG_DISCOVERED"/>
             <!--  <data android:mimeType="application/vnd.wfa.wsc" /> -->
              <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <intent-filter>
              <action android:name="android.nfc.action.TECH_DISCOVERED"/>
              <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <intent-filter>
              <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
              <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>                                
        </activity>       

    </application>

我真的不知道应该在哪里过滤,我认为在 Reader Activity 中过滤就足够了,但这不起作用,所以我也在 MainActivity 中添加了过滤器,但这也没有任何作用。

希望你能帮助我。

谢谢!

【问题讨论】:

    标签: android nfc intentfilter android-applicationrecord


    【解决方案1】:

    您需要添加一个与第一个 NDEF 记录的 MIME 类型完全匹配的意图过滤器:

    <intent-filter>
      <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <data android:mimeType="application/vnd.wfa.wsc" />
    </intent-filter>
    

    【讨论】:

    • 第一条记录是Handover Select,第二条记录是application/vnd.wfa.wsc。我现在在 LG Nexus 4 下解决了这个问题,方法是将完整的技术列表添加到开发人员网站上给出的意图过滤器中。但是如果 AAR-Record 不在 NDEF 消息的第一位,它就会被完全忽略。但是在这个位置上我不需要它。但是输入必须是正确的,因为我使用 NXP 的应用程序扫描了 TAG,它向我显示了 3 条 NDEF 消息,并且 AAR 正确链接到我的应用程序......知道为什么 AAR 不起作用?
    • 以 Handover Select 作为第一条记录,Android 将自己处理消息,而不是将其传递给应用程序。但是,目前它只支持切换到蓝牙。应用程序无法过滤 Handover Select 消息(它是 Well-Known Type 记录;没有语法来处理带有意图过滤器的消息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多