2012-06-13 24 views
3

我必須使用android讀取和寫入數據到設備的COM端口,我使用的是javax.comm包,但是當我安裝了apk文件時,它沒有顯示設備的任何端口,因此是否有任何權限我需要在清單文件中添加哪些內容?如何在Android中讀寫數據到COM /串口?

+0

重複的問題:http://stackoverflow.com/questions/4621580/using-serial-port-rs-232-in-android – Robert

+0

的可能的複製[在android中使用串口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設備上進行安裝。如果你找到一種方法來實現你想要做的事情,你實際上不能在Linux環境中尋找「COM」端口。串行端口將採用不同的名稱。

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

所以,假設,如果你的想法是工作,你必須尋找這些名字。

對你來說幸運的是,Android確實提供了與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命令到達USB設備!也想知道如果這個消息成功到達設備,那麼它必須返回一些命令,所以我從哪裏可以檢測到!請回復謝謝。 –