2012-02-05 66 views
2

我發現當我將Nexus S(運行Android 2.3.6)旁邊的NFC標籤包含NDEF消息,並且URI記錄指向一個網站,這將導致(如預期的)NFC活動選擇器顯示(因爲我有幾個NFC讀卡器應用程序安裝,我正在我自己的應用程序,也攔截檢測到的NFC標籤)。Android 2.3.6和4.x的NFC檢測功能有所不同

但是,使用Galaxy Nexus(Android v4,Ice Cream Sandwich),活動選擇器不會顯示。它將直接啓動瀏覽器。 logcat中會顯示這樣的:

D/NfcService(438): TAG: Tech [android.nfc.tech.MifareUltralight, android.nfc.tech.NfcA, android.nfc.tech.Ndef] 
I/ActivityManager(196): START {flg=0x10008000 cmp=com.android.nfc3/com.android.nfc.NfcRootActivity (has extras)} from pid 438 
I/ActivityManager(196): START {act=android.nfc.action.NDEF_DISCOVERED dat=http://www.someURL.com/someotherstuff cmp=com.google.android.browser/com.android.browser.BrowserActivity (has extras)} from pid 438 

所以這給了我兩個問題:

A)的Android 2.3.6和4.x決定不同的表現,becaaaause ...?

二)即使當我試圖限制我的應用程序,以匹配包含www.someURL.com主機只NFC標籤,通過把

<data 
    android:host="www.someURL.com" 
    android:pathPattern="/*" 
    android:scheme="http" /> 

到我的3個意向過濾器(一個用於TAG_DISCOVERED即一個用於TECH_DISCOVERED,一個用於NDEF_DISCOVERED,我真的試圖在那裏抓住NFC活動選擇器的注意力..),結果不會改變。它只會打開瀏覽器。 ATM唯一可行的是前臺調度...

任何想法?

回答

2

你應該使用「android:pathPrefix」而不是「android:pathPattern」。您現在匹配0個或多個出現的「/」...

+0

準確地說是什麼問題。現在我正在使用'android:pathPrefix =「/ someotherstuff」'。前綴中不需要「*」。 – NameZero912 2012-02-29 14:52:17

2

你的觀察是正確的:

A)的Android 2.3.6和4.x決定不同的表現,becaaaause ...?

因爲在Android 4.0.x中,傳入的NDEF消息的行爲已經精簡以提供更好的用戶體驗。 Android會檢測一些消息類型並將數據直接傳遞給內置應用程序。

我敢肯定,這是爲URI記錄進入瀏覽器和VCard消息去聯繫人應用程序,但也可能有其他消息。

您可以通過啓用前景調度來讓您的應用程序以焦點運行,從而覆蓋此內置行爲。

+0

我明白了。你能否詳細說明你的意思是上半年「重點」?我想你的意思是「除了」和應用程序是可見的「之外的意思,因爲這是理解的(我在onResume中啓用前臺調度並在onPause中禁用它)。而「焦點」這個術語只有在像按鈕這樣的UI元素的背景下才能知道。 – NameZero912 2012-02-07 06:13:16