Android NFC не работает с ICS - PullRequest
       0

Android NFC не работает с ICS

0 голосов
/ 01 марта 2012

вчера я смотрел Google IO Talk о NFC, а сегодня я пытаюсь сделать с ним несколько забавных вещей.

На данный момент у меня есть 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 способом сообщение с телефона на другой и изменить содержимое текста редактирования (как это должен делать пример!).

Я думаю, что сообщение NFC выходит, но другой телефон не захватывает его ... Кто-то знает почему?

Это 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

Я внес некоторые изменения в код Sticky Notes по умолчанию, чтобы обновить его для поддержки API ICS NFC. На самом деле, если вы перейдете к документации, вы можете увидеть это: http://developer.android.com/reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush%28android.app.Activity,%20android.nfc.NdefMessage%29

Этот метод устарел. использовать вместо этого setNdefPushMessage (NdefMessage, Activity, Activity ...)

Настоятельно рекомендуем использовать новый setNdefPushMessage (NdefMessage, Активность, Активность ...) вместо этого: он автоматически подключается к вашему жизненный цикл активности, поэтому вам не нужно звонить включить / отключить в вашем onResume / OnPause.

Также я читаю это: для правильной работы NDEF push другое NFC-устройство должно поддерживать либо SNEP (простой протокол обмена Ndef) NFC Forum, либо Android * com .android.npp"(протокол Ndef Push). Это было необязательным для устройств NFC уровня Gingerbread Android, но SNEP является обязательным для Ice-Cream-Sandwich и выше .

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

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

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

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

Ответы [ 3 ]

1 голос
/ 05 марта 2012

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

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

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

1 голос
/ 05 марта 2012

Спасибо за ваш ответ.

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

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

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

1 голос
/ 03 марта 2012

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

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

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

...