이번에 블루투스 프린터를 제어하는 일종의 안드로이드 라이브러리(?)를 하나 만드는 중인데요.
안드로이드 타겟버전은 API 14 (아이스크림센드위치 4.0)으로 작업중이고, 블루투스 프린터는 1-N의 접속밖에 처리하지 못하는 블루투스 모듈이 들어간 것으로 확인하였습니다.
이번에 가장 골머리 앓은 내용은 안드로이드 기기쪽에서 연결 이후, 연결 해제를 둘다 처리하면 간편한데, 간혹 기기의 전원문제나 기타 등등의 이유로 기기가 멈추거나 전원이 꺼진 것을 바로 체크하지 못하는 것을 확인하였습니다. 안드로이드에서 제공하는 블루투스 어댑터, 디바이스, 소켓을 이용해봐도 전원이 꺼진 기기가 아직도 연결되어 있고, OutputStream을 통한 데이터 전송도 아무 오류없이 전달되는 것처럼 보입니다만, 눈앞에 전원이 꺼진 기기가 있는데 ;;;;;;;;
이리저리 고민하다가 BroadcastReceiver에 블루투스 연결, 연결해제 관련 IntentFilter를 걸어서 처리하는 방법으로 일단은 해놓은 상태입니다. 로직상에서 BluetoothSocket.isConnected() 메소드 등이 위의 경우엔 정상적으로 작동하지 않는 것입니다. OutputStream도 바보가 된 상태이구요..
일단 로그캣을 분석한 내용으로는 BluetoothSocket의 isConnected() 메소드나 OutputStream이 오류를 발생하기 까지 걸리는 시간보다 BroadcastReceiver에서 BluetoothDevice.ACTION_ACL_DISCONNECTED 이벤트가 더 빨리(?) 발생하는 것을 확인하였습니다.
빠르다고 해봐야 거의 20초 가까운 시간을 먹통이 되어서 블루투스 프린터가 연결되어 있는 것 마냥 기기가 작동하니 참 답답합니다.
기기와 접속이 끊어지기까지 계속 연결해 놓는 것을 기본으로 하는 프로그램이라서 필요시 BluetoothSocket을 connect() 로 처리할 수 없는 상태에서는 아마 이게 최선으로 생각됩니다.