2012-03-02 2 views
2

javax.cardio 패키지를 사용하여 ACR122U를 통해 Nexus S에서 NDEF 메시지를 수신했습니다. 간단한 텍스트 "Hello!"를 보내는 Android Beam 앱을 만들었습니다. 인 텐트는 NDEF_DISCOVERED 태그를 필터링합니다. TgGetData (에는 0x86) 명령을 사용할 때 얻을 것 :ACR122를 사용하여 com.android.npp에 연결하려고했지만 [NFCSTATUS_INVALID_STATE]라고 말합니다.

NfcP2pLinkManager(7588): Sending ndef via SNEP 
NFC JNI(7588): Socket not connected 
NFC JNI(7588): LLCP Link deactivated 
NFC JNI(7588): LLCP Connect request failed 
NfcService(7588): LLCP Link Deactivated message. Restart polling loop. 
NFC JNI(7588): phLibNfc_Llcp_Close() returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 
NfcP2pLinkManager(7588): Failed to connect over SNEP, trying NPP 
NdefPushClient(7588): about to create socket 
NfcP2pLinkManager(7588): LLCP deactivated. 
NdefPushClient(7588): about to connect to service com.android.npp 
NFC JNI(7588): phLibNfc_Llcp_ConnectByUri() returned 0x0011[NFCSTATUS_INVALID_STATE] 
NdefPushClient(7588): couldn't send tag 
NdefPushClient(7588): exception: 
NdefPushClient(7588): java.io.IOException 
NdefPushClient(7588): at 
com.android.nfc.nxp.NativeLlcpSocket.connectToService(NativeLlcpSocket.java:47) 

나는 ACR122에 대해 다음 해요 APDU 워크 플로우는 기본적으로 : 나는에 연결할 수없는 이유

1) TgInitAsTarget = 0xD4, 0x8c 
2) TgGetData = 0xD4, 0x86 
3) TgSetData = 0xD4, 0x85, 0x81 
4) TgGetData = 0xD4, 0x86 

사람이 알고 있나요은 " Nexus S의 com.android.npp "서비스?

답변

0

문제점이 발생한 이유를 확인했습니다. 일단 TgGetData를 통해 teh 전화에서 첫 번째 바이트 집합을 수신하면 CONNECT APDU를 보낼 필요가 없습니다. 바이트의 첫 번째 스트림이 끝나면 CC APDU 또는 CONNECTION COMPLETE를 보냅니다. 도움을 필요로하는 사람들의 경우, APDU를가 있어야한다 :

1) TgInitAsTarget 0xD4 0x8C 
2) TgGetData 0xD4 0x86 
3) TgSetData (CC) 0xD4 0x8E - no need to send the service name. Simple the DSAP-CC-SSAP bytes. That's it. 
4) TgGetData 0xD4 0x86 - you should get your data in this byte stream. 
5) TgRelease 0xD4 0x8E 

기억 : 당신은 당신이 당신의 TgSetData에서 사용하는 주변의 휴대 전화에서 얻을 DSAP와 SSAP를 전환해야합니다. 행운을 빕니다!

+0

통신의 모든 바이트 시퀀스를 복사/붙여 넣기 할 수 있습니까? 나는 내 전화에서 내 ACR122U 판독기로 NDEF 메시지를 보내려고 일주일을 보냈지 만 불가능했습니다. ( – OverMind

+0

@OverMind, 나는이 프로젝트에서 계속 전진 했으므로이 시퀀스가 ​​더 이상 없지만, 내 보관소를 빨리 찾으면 찾을 수 있습니다. 당시 Nexus S에서 작업 중이므로이 순서가 휴대 전화 및/또는 OS에서 반드시 동일하지 않을 수 있습니다. – codedawg82

-1

ACR122에 대한NPP 구현 방법을 참조하십시오.

+0

이 사람은 내가 가지고있는 것과 매우 유사한 코드를 가지고 있습니다. 다음 ADPU를 사용했습니다 : (byte) 0xd4, (byte) 0x8e --- TgSetData (byte) 0x05, (byte) 0x21, (byte) 0x06, (byte) 0x0f, (byte) 0x63, (byte) 0x6f, (바이트) 0x6d, (바이트) 0x2e, (바이트) 0x61, (바이트) 0x6e, (바이트) 0x64, (바이트) 0x72, (바이트) 0x6f, (바이트) 0x69, (바이트) 0x64, 바이트) 0x2e, (바이트) 0x6e, (바이트) 0x70, (바이트) 0x70 이것은 서비스에 연결하고 ndefmessage를 수신하지만 여전히 빔을 완료하지 않습니다. 그것은 "NdefPushServer : 나쁘게 형식화 된 NDEF 메시지, 무시합니다"라는 오류를 던졌습니다. 즉, 빔이 실패했다고 의심되는 IOException입니다. 왜 그런가? – codedawg82

+0

"안녕하세요!" 메시지가 NDEF 메시지에 캡슐화되지 않았습니다 (예 : 텍스트 RTD 사용)? –

+0

안드로이드 SDK가 NDEF로 변환하기위한 API를 제공하기에 충분히 좋은 Hello 메시지를 내 전화기에서 수신하려고합니다. Nexus에서 다른 Nexus로 메시지를 올바르게 사용했습니다. 전화가 연결할 수있는 ACR 자체에 대한 com.android.npp 서비스를 만들어야하는지 궁금합니다 ... 다음 디버그 줄 때문에이 유일한 이유는 - NdefPushClient (7588) : about com.android.npp 서비스에 연결 – codedawg82

관련 문제