2012-06-13 2 views
3

나는 안드로이드를 사용하여 장치의 COM 포트에 데이터를 읽고 쓰려면 javax.comm 패키지를 사용하지만 apk 파일을 설치하면 장치의 포트가 표시되지 않으므로 권한이 있습니다. 매니페스트 파일에 추가해야하는 항목은 무엇입니까?안드로이드에서 COM/시리얼 포트에 데이터를 읽고 쓰는 방법은 무엇입니까?

+0

중복 질문 :의 http://stackoverflow.com/questions/4621580/using-serial-port-rs-232-in-android – Robert

+0

가능한 중복 [안드로이드에서 직렬 포트 RS-232를 사용합니까?] (http://stackoverflow.com/questions/4621580/using-serial-port-rs-232-in-android) – Programmer

답변

16

운영 체제와 관련된 문제입니다. Android runs Linux under the hood이고 Linux는 Windows와 다른 방식으로 직렬 포트를 처리합니다. javax.comm에도 win32com.dll, driver file이 포함되어 있으며 Android 기기에는 설치할 수 없습니다. 당신이하려는 일을 성취 할 수있는 길을 찾으면 리눅스 환경에서 실제로 "COM"포트를 찾을 수 없습니다. 직렬 포트는 다른 이름으로 이동합니다.

Windows Com Port Linux equivalent 
     COM 1   /dev/ttyS0 
     COM 2   /dev/ttyS1 
     COM 3   /dev/ttyS2 

따라서 아이디어가 효과적이면이 이름을 찾아야합니다.

다행히도 안드로이드는 USB 장치와 인터페이스하기위한 조항을 가지고 있습니다 (병렬 또는 RS-232 포트와 달리 연결하려는 것으로 가정). USB Host. 여기 당신이 원하는 것 무엇으로 이렇게하려면, 당신은 당신의 장치를 설정합니다 :

  1. USBManager.
  2. 이 장치를 찾아옵니다.
  3. USBInterfaceUSBEndpoint을 얻으십시오.
  4. 연결을 엽니 다.
  5. 데이터를 전송하십시오.

다음은 어떻게 수행 할 것인지 대략적인 예상입니다. 물론 코드에는 더 성숙한 방법으로 작업 할 것입니다.

String YOUR_DEVICE_NAME; 
byte[] DATA; 
int TIMEOUT; 

USBManager manager = getApplicationContext().getSystemService(Context.USB_SERVICE); 
Map<String, USBDevice> devices = manager.getDeviceList(); 
USBDevice mDevice = devices.get(YOUR_DEVICE_NAME); 
USBDeviceConnection connection = manager.openDevice(mDevice); 
USBEndpoint endpoint = device.getInterface(0).getEndpoint(0); 

connection.claimInterface(device.getInterface(0), true); 
connection.bulkTransfer(endpoint, DATA, DATA.length, TIMEOUT); 
독서의 즐거움을위한

추가 자료 : http://developer.android.com/guide/topics/connectivity/usb/host.html

+0

나는이 코드를 실행하여 이제 만족시킬 수 있습니까? USB 장치에 명령이 도달했는지 여부를 확인하는 방법이 있습니까? 또한이 메시지가 성공적으로 장치에 도달하면 어떤 명령을 반환해야한다는 것을 알고 싶습니다. 회신 해 주셔서 감사합니다. –

관련 문제