Nexus 4 - NFC AAR和滤波器

时间:2013-02-02 12:28:51

标签: android nfc intentfilter android-applicationrecord

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

类型为application/vnd.wfa.wsc

此外,我将Android应用程序记录添加为我的NDEF消息。

我的Android Manifest XML中也定义了一个过滤器,用于发现NFC标签。

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

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

  1. 如果我这样做,Nexus 4不会被AAR启动......它只是启动,如果我将此记录放在NDEF消息的第一个位置,但是我放弃了Ndef / Tech的事件/标签已发现。
  2. 我的android显示器中也有过滤器,但这似乎没有做任何事情,我尝试了所有三个事件但没有任何反应
  3. 此外,如果扫描标签,通常如果有更多应用程序过滤事件,我会得到一个应用程序选择器,我想为此标签启动哪个应用程序。但是这里没有列出我的申请。

    这是我创建消息的方式:

    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中添加了过滤器,但这也没有做任何事情。

    我希望你能帮助我。

    谢谢!

1 个答案:

答案 0 :(得分:3)

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

<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>