2012-03-01 2 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 выходит, но другой телефон не захватывает его ... Кто-то знает почему?

Это LogCat от одного телефона (если эти 2 телефона в контактирующих друг с другом):

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

Я сделал некоторые изменения по умолчанию Sticky Notes код чтобы обновить его для поддержки API ICS NFC. 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 (Простой протокол ЦНК Exchange), или «com.android.npp» Андроида (Ndef Push Protocol). Это было необязательно для устройств Android NFC на уровне Gingerbread, но SNEP является обязательным для Ice-Cream-Sandwich и за пределами.

Я не понимаю, если с помощью setNdefPushMessage он будет автоматически поддерживать протокол SNEP, если мне нужно внести другие изменения. В тот момент, когда я сказал, что использую Galaxy Nexus (4.0.2) и Nexus S (4.0.3), и у меня нет других устройств для проведения тестов.

Я также внедрил onNdefPushComplete для адаптера, который отправляет сообщения, и за то, что я вижу, его никогда не вызывали. Я не понимаю, является ли это проблемой для APIS, Devices или моего кода. Так что я не понимаю: если все работает нормально, когда я меняю текст текста редактирования Sticky Note, и я связываю 2 устройства с NFC, текст будет отправлен на другое устройство? Это пример?

Действительно странно, что я не могу найти примеры о том, как сделать NFC с ICS и официальной документации не объясняет это так хорошо ...

Кто-то знает, как решить?

ответ

1

Благодарим вас за ответ.

Как я уже сказал в комментарии ответа, я совершил большую ошибку.

В ICS при включении опции NFC она активирует функцию чтения. Когда вы включите функцию Android Beam, она также включит функцию «write».

Я отключил функцию Android Beam, поэтому это была большая проблема!

1

Обнаружение АЭС и/или SNEP полностью автоматизировано, выполняется внутри стека программного обеспечения NFC и скрыто от приложений. Приложения не должны знать об этом, и setNdefPushMessage() и setNdefPushMessageCallback() приведут к отправке вашего сообщения NDEF через SNEP, если оба устройства поддерживают его или NPP в противном случае.

Возможно, ваша проблема связана с тем фактом, что антенны NFC в Nexus S и Galaxy Nexus находятся в несколько разных местах. В Nexus S он больше подходит к верхней части задней части (антенна расположена внутри задней части телефона, откройте ее, чтобы увидеть ее), в то время как в Galaxy Nexus она была встроена в батарею , который больше расположен к нижней части задней стороны.

Когда 2 телефона подключаются через NFC, вы должны услышать звук (громкость, контролируемая громкостью звонка), и экран должен «уменьшить», показывая сообщение «Прикоснуться к лучу». (Конечно, вы должны убедиться, что NFC и Beam включены в настройках телефона.)

+0

Я делал большую ошибку. Я уверен, что включение NFC и отключение функции Beam все равно заставит NFC работать. Я узнал, что включение NFC позволяет считывать часть тегов, позволяя Beam в ICS включить запись. Так что в заключение мои устройства могли читать, но не писать :) Теперь все работает отлично :) – StErMi

1

Я опробовал демонстрацию StickyNotes, как это было (без каких-либо изменений кода) на двух телефонах Galaxy Nexus (ICS 4.0 .1), и он работает хорошо (если вы не трогаете «Write to Tag» -Button !!!).

Он просто отправляет отредактированный текст на другой телефон, когда вы подтверждаете «Touch to Beam» -Screen, нажав на экран.

Я не внес изменений, он все еще находится на android: minSdkVersion = "10" (android 2.3.3).

Смежные вопросы