본문 바로가기

IT

USB2Serial 제어시 USB Permission 획득에 관한

반응형

 USB기기를 제어하는 경우 USB Permission 획득을 처리하는 것이 그다지 어려운 것은 아니다. 하지만 한번에 다량(2개 이상)의 멀티 USB Device를 제어하는 경우가 발생하면 이것이 생각보다 쉬운 일이 아니다.


 원론적인 부분을 먼저 이야기하면 일단 USB Permission을 획득하기에 앞서 USB연결에 대한 "android.hardware.usb.action.USB_DEVICE_ATTACHED" 액션을 처리하는 것이 우선이다. 그리고 이 액션은 Receiver, Service 등에서 직접적으로 처리하면 USB Permission에 대한 권한을 시스템기본값으로 저장하여 동일한 기기가 연결될 때 다시 Permission을 획득하라는 창이 뜨는 것을 방지할 수 있는 뛰어난(?) 기능을 사용할 수 없다.


 이유는 왜인지 잘 모르겠지만 "android.hardware.usb.action.USB_DEVICE_ATTACHED" 해당 액션은 Activity를 통하여(저 액티비티는 화면구성요소 layout을 포함하지 않은 단순히 액션처리만을 위한 엑티비티이다.) 단순히 브로드캐스팅을 위한 엑티비티가 필요하다. 이유는 Activity에서만 Permission을 기본값으로 저장하여 사용하는 기능이 동작하기 때문이다.


 또 하나 USB는 기기를 연결하고 연결이 해제되고 다시 연결될 때 연결된 기기의 ID값(/dev/usb/ 아래 생성되는 링크)가 항상 변화한다. 1~127까지 변화한다. 이 변화를 Receiver와 Service에서는 기본값으로 저장해놓아도 이 ID값이 변경되면 다시 Permission을 획득하라는 창이 뜬다. 하지만 Activity에서 획득하면 이러한 경우가 없다라는 것이 정말 큰 특징 중 하나이다.


 개발자 입장에서야 그거 한번 누르는 것이 대수냐라고 생각하고 항상 연결된 기기에서 그거 한번 누르는게 뭐 어떠냐라고 생각할지모르지만 필드에서는 무슨일이 발생할지 모르니 저런 하드웨어 연결과 관련된 부분은 최대한 심플하고 한번의 설정으로 유지되는 것이 좋다는 것이 본인 생각이다.


 누구에게는 소소한 팁으로 누구에게는 중요한 문제를 해결하는 데 도움이 되었으면 한다.


반응형