?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

안드로이드 블루투스 IOException 에러코드입니다.

페이지 정보

작성자 강병현 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-01-28 14:54 조회2,307회 댓글5건

본문

바쁘실텐데 항상 답변 감사드립니다. 말씀해주신 에러코드를 따와서 조금 더 자세하게 질문드리겠습니다..

우선 블루투스 모듈을 통해 수신해야할 데이터를

sprintf(BT1,"L_deg: %8.3f\r",L_Encorder); 명령어로 보내고 있습니다.

BT1은 27크기의 배열이고 L_Encorder는 0~65526의 ADC값입니다.

이를 상용화된 블루투스 테스트 앱인 BlueTerm으로 테스트 해보면 첨부파일 1의 사진처럼 잘 나옵니다.

하지만 제가 만든 앱에서 테스트 할 경우 데이터가 정리되지 않게 나오는 것은 이해가 됩니다. 저번 질문에 답변해주신 것처럼 시작문자와 끝처리 문자를 코딩하지 않았기 때문이죠.

그런데 첨부파일 2의 사진을 보시면 처음부터 안되는 것이 아니라 읽어오는 도중 IOException이 발생합니다. 에러코드를 보면 소켓이 닫힌다고 하는데 도중에 닫히는 이유도 잘 모르겠으며 해결책을 제시해주시면 감사하겠습니다. 아래는 에러 코드 입니다.

01-28 14:16:14.334 22676-22676/com.hardcopy.btctemplate D/LLService: Service - MESSAGE_READ:
01-28 14:16:14.378 22676-22676/com.hardcopy.btctemplate D/LLService: Service - MESSAGE_READ:
01-28 14:16:19.370 22676-29417/com.hardcopy.btctemplate E/BluetoothManager: disconnected
                                                                            java.io.IOException: bt socket closed, read return: -1
                                                                                at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:508)
                                                                                at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
                                                                                at java.io.InputStream.read(InputStream.java:162)
                                                                                at com.hardcopy.btctemplate.bluetooth.BluetoothManager$ConnectedThread.run(BluetoothManager.java:484)
01-28 14:16:19.371 22676-29417/com.hardcopy.btctemplate D/BluetoothManager: BluetoothManager :: connectionLost()
01-28 14:16:19.371 22676-29417/com.hardcopy.btctemplate D/BluetoothManager: setState() 3 -> 1
01-28 14:16:19.443 22676-22686/com.hardcopy.btctemplate W/art: Suspending all threads took: 26.107ms
01-28 14:16:19.452 22676-22676/com.hardcopy.btctemplate D/LLService: Service - MESSAGE_STATE_CHANGE: 1

 

 

 

 

 

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

안드로이드의 블루투스 스택이 버전에 따라 변경되면서 기존부터 사용하던 블루투스 소켓이 열리지 않는 문제가 있나봅니다. createRfcommSocket 메서드를 강제로 실행해서 소켓을 열어야 하는 것 같습니다.
아래 링크의 코드를 이용해서 패치해보세요.
http://stackoverflow.com/questions/18657427/ioexception-read-failed-socket-might-closed-bluetooth-on-android-4-3

강병현님의 댓글

강병현 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

그렇다면 소켓을 강제로 열어야 하는 부분을 IOException이 발생한 read부분 try ~ catch의 catch에서 강제로 실행해줘야한다는 말씀인가요???

강병현님의 댓글

강병현 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

죄송하지만... 링크의 내용을 보고 이리저리 시도 해봤으나 .. 링크의 클래스를 새로 만들어 강제로 열어 주는 방법을 모르겠습니다;;ㅠㅠ

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

지금은 다른 작업을 하는 중이라 이 부분을 볼 수가 없습니다. 주변에 안드로이드 경험있는 분과 함께 내용을 적용해보세요.