P2P NFC-связь между Galaxy S3 и ACR122

Я работаю над проектом, который требует связи NFC между телефоном Android и ПК. Я использую Galaxy S3 в качестве телефона Android и ACR122 в качестве устройства чтения NFC. Я пробовал приложения на здесь и здесь.

Я использовал образец приложения, которое можно найти в android sdk, для передачи сообщения NDEF через NFC.

Сколько раз я ни пытался, мне не удавалось установить соединение между телефоном и ПК. Приложение Android работает нормально, поскольку оно может передавать сообщение NDEF через другие телефоны, но когда дело доходит до подключения к компьютеру, оно не работает. Светодиод на считывателе меняет цвет с красного на мигающий зеленый и оранжевый, когда я прикасаюсь телефоном к считывателю, но больше ничего не происходит.

Вот вывод журнала из приложения ismb-npp-java:

Получить завод

Получите терминалы

Название терминала: ACS ACR122 0

T=1

Вызывается rightProcedureTarget ..

[DEBUG] {отправка [50 байт]} 0xFF 0x00 0x00 0x00 0x2D 0xD4 0x8C 0x01 0x00 0x00 0x00 0x00> 0x00 0x40 0x01 0xFE 0x0F 0xBB 0xBA 0xA6 0xC9 0x89 0xFF 0x00B 0x00 0x00 0x00 0x00 0x00 0x00 0xC9 0x89 0x00 0x00 0x06 0x46 0x66 0x6D 0x01 0x01> 0x10 0x00

it.ismb.npp.IsmbNppException: проблема с передачей данных

[DEBUG] {отправка [7 байтов]} 0xFF 0x00 0x00 0x00 0x02 0xD4 0x86

[DEBUG] {отправка [26 байтов]} 0xFF 0x00 0x00 0x00 0x15 0xD4 0x8E 0x05 0x20 0x06 0x0F 0x63> 0x6F 0x6D 0x2E 0x61 0x6E 0x64 0x72 0x6F 0x69 0x646 0x2E 0x69 0x646 0x2E 0x70

на it.ismb.npp.IsmbNppConnection.transceive (IsmbNppConnection.java:281)

на it.ismb.npp.IsmbNppConnection.rightProcedureTarget (IsmbNppConnection.java:301)

на it.ismb.npp.SenderToPhone $ ThreadSender.run (SenderToPhone.java:90)

по адресу it.ismb.npp.SenderToPhone $ InitiatorTask.run (SenderToPhone.java:75)

в java.util.TimerThread.mainLoop (неизвестный источник)

в java.util.TimerThread.run (неизвестный источник)

it.ismb.npp.IsmbNppException: проблема с передачей данных

на it.ismb.npp.IsmbNppConnection.transceive (IsmbNppConnection.java:281)

на it.ismb.npp.IsmbNppConnection.rightProcedureTarget (IsmbNppConnection.java:306)

на it.ismb.npp.SenderToPhone $ ThreadSender.run (SenderToPhone.java:90)

по адресу it.ismb.npp.SenderToPhone $ InitiatorTask.run (SenderToPhone.java:75)

в java.util.TimerThread.mainLoop (неизвестный источник)

в java.util.TimerThread.run (неизвестный источник)

Исключение в потоке «Таймер-0» java.lang.IllegalStateException: карта удалена

в sun.security.smartcardio.CardImpl.checkState (неизвестный источник)

в sun.security.smartcardio.ChannelImpl.checkClosed (Неизвестный источник)

в sun.security.smartcardio.ChannelImpl.transmit (неизвестный источник)

на it.ismb.npp.IsmbNppConnection.transceive (IsmbNppConnection.java:263)

на it.ismb.npp.IsmbNppConnection.rightProcedureTarget (IsmbNppConnection.java:317)

на it.ismb.npp.SenderToPhone $ ThreadSender.run (SenderToPhone.java:90)

по адресу it.ismb.npp.SenderToPhone $ InitiatorTask.run (SenderToPhone.java:75)

в java.util.TimerThread.mainLoop (неизвестный источник)

в java.util.TimerThread.run (неизвестный источник)

Я использовал все драйверы, которые смог найти (включая последнюю версию), но проблема не устранена.

Может быть проблема с устройством? Или мне что-то здесь не хватает?


person Engin Erdoğan    schedule 23.10.2012    source источник
comment
Работает ли ваше устройство для чтения карточек и т. Д.? Также попробуйте код http://www.libnfc.org и .google.com / p / nfc-tools / source / browse / trunk / libnfc-llcp для P2P.   -  person Nikolay Elenkov    schedule 23.10.2012


Ответы (3)


Какая у вас версия Android? NPP работает только на старых версиях Android (я считаю, до ICS).

Для ICS и JellyBean попробуйте использовать протокол SNEP. У автора проекта, который вы используете, есть версия для SNEP здесь:

http://code.google.com/p/ismb-snep-java/

person MakeSomething    schedule 24.10.2012

попробуйте это, чтобы получить NfcAdapter

nfcP2PAdapter = NfcAdapter.getDefaultAdapter (latestContext.getApplicationContext ());

// недавний контекст - это активность (это)

Это будет работать для вас, это работает для меня

person user1722363    schedule 11.03.2013

Указанная вами ошибка связана с методом приема в NppConnection.java. Я бы посоветовал вам сначала положить телефон на считыватель (пусть светодиод считывателя загорится зеленым), а затем снова запустить приложение. Посмотрите, работает ли это. Если нет, установите точку останова в методе приема и проверьте значения SW1 и SW2 (если команда выполнена успешно, вы ожидаете, что sw1 = 0x90 и sw2 = 0x00). В случае ошибок вы получите либо sw2, не равное 0x00, либо sw1 = 0x63.

Насколько я понимаю, даже если вы используете более новую версию Android, и если snep не поддерживается ни одним из ваших устройств, они вернутся к NPP.

person user720694    schedule 09.05.2013