2012-03-01 71 views
0

昨天我看了Google IO Talk關於NFC,今天我試着用它做一些有趣的事情。Android NFC不能與ICS一起工作

目前我有Galaxy Nexus(ICS 4.0.2)和Nexus S(ICS 4.0.3)。 我已經安裝了談話的示例應用程序:http://nfc.android.com/StickyNotes.zip

我也跟隨這如何做才能瞭解一些意見流量:http://www.jessechen.net/blog/how-to-nfc-on-the-android-platform/

我試圖做的是以p2p方式發送從手機到另一個手機的消息並更改edittext內容(如示例所要做的!)。

我認爲NFC消息正在外出,但其他手機並沒有抓住它... 有人知道爲什麼嗎?

這是從手機(當那些2個手機是彼此接觸)之一的logcat:

03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte d0 
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte a6 
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte 42 
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte 1 
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte fc 
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte c1 
03-03 15:37:48.264: D/NFC JNI(446): Discovered P2P Target 
03-03 15:37:48.264: D/NfcService(446): LLCP Activation message 
03-03 15:37:48.264: D/NfcService(446): NativeP2pDevice.MODE_P2P_TARGET 
03-03 15:37:48.296: I/NFC JNI(446): LLCP Link activated (LTO=150, MIU=128, OPTION=0x00, WKS=0x01) 
03-03 15:37:48.296: D/NfcService(446): Initiator Activate LLCP OK 
03-03 15:37:48.296: I/NfcP2pLinkManager(446): LLCP activated 
03-03 15:37:48.296: D/NfcP2pLinkManager(446): onP2pInRange() 
03-03 15:37:48.467: D/dalvikvm(446): GC_FOR_ALLOC freed 3192K, 18% free 17750K/21575K, paused 19ms 
03-03 15:37:48.467: I/dalvikvm-heap(446): Grow heap (frag case) to 20.515MB for 3265936-byte allocation 
03-03 15:37:48.514: D/dalvikvm(446): GC_CONCURRENT freed <1K, 3% free 20939K/21575K, paused 4ms+3ms 
03-03 15:37:51.264: I/NFC JNI(446): LLCP Link deactivated 
03-03 15:37:51.264: D/NfcService(446): LLCP Link Deactivated message. Restart polling loop. 
03-03 15:37:51.264: D/NfcService(446): disconnecting from target 
03-03 15:37:51.264: I/NfcP2pLinkManager(446): LLCP deactivated. 
03-03 15:37:52.022: D/NfcP2pLinkManager(446): Debounce timeout 
03-03 15:37:52.022: D/NfcP2pLinkManager(446): onP2pOutOfRange() 

UPDATE

我做了一些更改默認便籤代碼爲了升級它以支持ICS NFC API。 Infact如果你去的文檔,你可以看到這個:http://developer.android.com/reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush%28android.app.Activity,%20android.nfc.NdefMessage%29

此方法已棄用。 使用setNdefPushMessage(NdefMessage,活動,活動...),而不是

強烈建議使用新的setNdefPushMessage(NdefMessage, 活動,活動...),而不是:它會自動掛接到您的 活動的生命週期,因此您不需要在onResume/onPause中調用啓用/禁用。

而且我讀到這樣的:NDEF推到正常工作的其他NFC設備必須支持無論是NFC論壇的SNEP(簡單NDEF交換協議),或Android的 「com.android.npp」( Ndef Push Protocol)。這在薑餅級別的Android NFC設備上是可選的,但是冰淇淋三明治和超出必須使用SNEP。

我不明白如果使用setNdefPushMessage,它會自動支持SNEP協議,如果我不得不做其他更改。 目前正如我所說我正在使用Galaxy Nexus(4.0.2)和Nexus S(4.0.3),並且我沒有其他類型的設備進行測試。

我也爲發送消息的適配器實現了onNdefPushComplete,並且我可以看到它從來沒有調用過..我不明白這是關於APIS,設備還是我的代碼的問題。 所以我不明白的是:如果一切工作正常,當我更改粘滯便箋編輯文本的文本,並將兩臺設備連接到NFC時,文本會被髮送到其他設備?這是例子嗎?

真正奇怪的是,我無法找到有關如何使用ICS和官方文檔並不能解釋這麼好做NFC例子...

有人知道如何解決?

回答

1

謝謝你的回答。

正如我在回答評論中所說的,我犯了一個很大的錯誤。

在ICS中,當您啓用NFC選項時,它將啓用「讀取」功能。 當您啓用Android Beam功能時,它也會啓用「寫入」功能。

我禁用了Android Beam功能,所以這是個大問題!

1

NPP和/或SNEP的檢測是完全自動的,在NFC軟件堆棧內完成並隱藏於應用程序中。應用程序不需要知道這一點,如果兩個設備都支持它或NPP,那麼setNdefPushMessage()setNdefPushMessageCallback()將導致您的NDEF消息通過SNEP發送。

您的問題可能與Nexus S和Galaxy Nexus中的NFC天線位置略有不同有關。在Nexus S中,它更多地位於背面的上部(天線位於手機背面的內部;打開它可以看到它),而在Galaxy Nexus中,它已經集成在電池中,它更接近背面的底部。

當兩部手機通過NFC連接時,您應該聽到一個聲音(音量由鈴聲音量控制),並且屏幕應該「縮小」,同時顯示「Touch to beam」消息。 (當然,您應該確保NFC和Beam在手機設置中打開。)

+0

我犯了一個大錯。我希望啓用NFC並禁用波束功能仍然可以使NFC工作。我瞭解到,啓用NFC可啓用標籤的讀取部分,從而使ICS中的Beam能夠啓用寫入部分。所以最後我的設備能夠讀取但不寫:)現在一切工作正常:) – StErMi 2012-03-05 15:27:03

1

我試用了兩款Galaxy Nexus手機(ICS 4.0)上的StickyNotes Demo(沒有任何代碼更改) .1),它運作良好(如果你不碰「寫標籤」 - 巴頓!!!)。

當您通過點擊屏幕確認「Touch to Beam」 - 屏幕時,它只是將編輯後的文本發送到其他手機。

我沒有做任何修改,它仍然在android:minSdkVersion =「10」(android 2.3.3)上。