2013-02-02 62 views
2

我正在使用NFC保護設置配置在NFC論壇中指定的標籤上寫入靜態切換選擇記錄。 (SSID,加密,...)。Nexus 4 - NFC AAR和過濾器

類型是application/vnd.wfa.wsc

另外我想補充的Android應用程序記錄的最後NDEF記錄了我的NDEF消息。

我還在我的Android Manifest XML中爲NFC標籤發現了一個過濾器。

問題是:如果應用程序啓動並且顯示Reader活動,我可以讀取標記並且一切正常。

現在我想要以下內容: 如果我掃描我的標籤,並且活動不是@前臺或未啓動,則應用程序應自行啓動並自動切換到閱讀器模式。

  1. 如果我這樣做,Nexus 4不會由AAR啓動......它只是開始,如果我把這個記錄放在NDEF消息的第一個位置,但然後我放鬆了事件發現Ndef/Tech/Tag。
  2. 我也有我的Android manififest過濾,但這似乎沒有做任何事情,我嘗試了所有三場比賽,但什麼也沒發生

此外,如果標籤被掃描,通常如果有更多的應用程序過濾功能事件,我得到一個應用程序選擇器,我想爲這個標籤啓動哪個應用程序。但我的應用程序沒有在這裏列出。

這是我如何創建消息:

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活動中過濾,但這不起作用,因此我在MainActivity中也添加了過濾器,但這也無能爲力。

我希望你能幫助我。

謝謝!

回答

3

你需要補充的是完全相同的MIME類型的第一NDEF記錄相匹配的意圖過濾器:

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

第一個記錄是切換選擇,第二個是應用程序/ vnd.wfa.wsc。我通過將完整的Techlist添加到開發者網站上提供的intent-filter來解決LG Nexus 4現在的問題。但是,如果AAR-Record不在NDEF消息的第一位,則AAR-Record將被完全忽略。但是在這個位置上,我不需要它。但是輸入必須正確,因爲我使用恩智浦的應用程序掃描了TAG,並向我顯示了3條NDEF消息,並且AAR與我的應用程序正確鏈接了......有些想法爲什麼AAR不起作用? –

+0

隨着Handover Select作爲第一條記錄,Android將自行處理消息,而不是將它傳遞給應用程序。但是,目前它只支持切換到藍牙。應用程序無法篩選切換選擇消息(這是一個衆所周知的類型記錄;沒有語法來處理那些具有意圖過濾器的語法)。 –