2012-05-17 32 views
7

我想用usb数据线从我的电脑与我的android应用程序进行通信。我应该实施什么样的听众?Android中的USB数据线通信

我认为TCP连接将满足我的需求,但通过adb驱动程序连接它似乎很尴尬。

如何使用数据线从Windows到Android进行通信?

回答

8

我发现了一个关于这个问题的好帖子here。您基本上需要adb才能在Android设备和PC之间进行端口转发。例如:

C:\android-sdk-windows\tools\adb.exe forward tcp:38300 tcp:38300 

然后,您可以在Android设备和PC中使用标准套接字编程。

+0

太好了!谢谢你的提示! – opc0de

+0

我试过(我的ap使用端口21121),然后关闭平板电脑上的wifi并运行我的ap(应该一起说话的pc和android)。他们不会在我做Socket socket = new Socket(mServerIP,21121)的时候;套接字失败IOException – steveh

+0

我认为这对我不起作用,因为我在PC上有PC上的服务器套接字(它接听和接受)和客户端套接字。我想我需要在android上做端口转发?我尝试了免费港口代运车,但没有工作。 – steveh

3

Android通过两种模式支持各种USB外围设备和Android USB附件(实现Android附件协议的硬件):USB附件和USB主机。在USB配件模式下,外部USB硬件充当USB主机。

更多信息,请参阅:USB Host and Accessory和示例click here

+2

Unfortunatley USB配件和主机模式直接支持在Android 3.1 :(不是曼尼人有Android 3.1或更高版本 – opc0de

+0

您可以使用外部库。请参阅这里:http://developer.android.com/guide/topics/usb /accessory.html#choosing – Hesam

1

你需要有一个USB数据传输线(也称为USB数据连接线),这 支持API或SDK,然后使用下面的代码:

void usb2usbComm() 
{ 
BYTE  buf[65530]; 
LPU2URET pU2uRet; 
BOOL  bRet; 
int   ret; 
CString  msgstr; 

ret = u2u_open(); 
if (ret == -1){ 
    AfxMessageBox("Open U2U device Success."); 
}else{ 
    msgstr.Format("Open U2U device fail,return:%d", ret); 
    AfxMessageBox(msgstr); 
    return; 
} 

//send data 
bRet = u2u_SendData(buf, 65530, ret); 
if(!bRet) 
{ 
    msgstr.Format("Send data error,return:%d", ret); 
    AfxMessageBox(msgstr); 
    return; 
} 

//receive data 
while (1){ 
    bRet = u2u_RecvData(recvData, dataLen, ret); 
    if(!bRet) 
    { 
     msgstr.Format("Receive data error,return:%d", ret); 
     AfxMessageBox(msgstr); 
     u2u_close(); 
     return; 
    }else{ 
     break; 
    } 
} 
u2u_close(); 


} 

参见: Reference1Reference2

0

如果数据量是低你可能只是通过MTP复制文件来回 协议。在大多数设备上很容易获得,不需要启用USB调试或使用USB配件模式。