android通过USB与win7进行通信

今天查了大把的资料,这东西还真搞死我了.在这里先声明,有些东西是网上的,这里也不是真正的操作USB,那个比较烦,这里用的是adb转发.好了言归正传.

首先你肯定要有adb的环境,千万不要用什么360的那个,那是人家专用的,自己写的,你可以用谷歌的,版本最好要新,像我今天就走了弯路,在模拟器上调试正确,在真机上死了.原因是模拟器是4.0,我手机是4.0.3的,所要adb要尽可能新.

我这里就不像360那样用广播事件了,直接就用SOCKET了,我这里用PC作为客户端,手机作为服务端,PC也用JAVA来写的,PC这边开头有那一句非常重要,

Runtime.getRuntime().exec("adb forward tcp:10086 tcp:10085");

然后你最好让线程sleep几秒,因为启动转发要几秒,这个是试过的,

Thread.sleep(5000);

之前试过3秒有失败的.

上面的代码执行后如果你能在任务管理器里发现adb启动了,那么你就可以用SOCKET连接127.0.0.1:10086,端口是在上面指定的,10086代表PC要连接的端,10085代表android要侦听的端口,这两个端你可以自己定.然后android这边就不用我教你了,建立个serversocket侦听就OK了,然后就可以通信了.

如果你用上面的方法失败了,请确保你的ADB能正常连接手机,具体方法是在CMD里adb shell,看能否进入手机.如果不可以自己到网上去找下解决方法.

这里附点代码:大神不要吐曹了.


这里的SOCKET有封装过的,大家自己改

PC:

public static void main(String[] args) {
try {
Runtime.getRuntime().exec("adb forward tcp:10086 tcp:10085");
Thread.sleep(5000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  

ClientSocket cs =null;
while(true)
{
try {
System.out.println("正在连接127.0.0.1:10086!");
cs = new ClientSocket("127.0.0.1", 10086);
System.out.println("连接成功!");
break;
} catch (Exception e) {
System.out.println("连接失败!");
e.printStackTrace();
}

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

try {
cs.getDataOutputStream().write("hello".getBytes());
cs.flush();
byte b[] = new byte[200];
int nRecv;
nRecv = cs.getSocket().getInputStream().read(b);
String text = new String(b,0,nRecv);
System.out.println(text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


android端:

public void run() {
try {
ServerSocket srv = new ServerSocket(10085);
Log.v("success", "侦听成功!");
t = "侦听成功!\n";
msg = new Message();
msg.obj = t;
mhandler.sendMessage(msg);
s = srv.accept();
Log.v("success", "客户连接!");
t = "客户连接!\n";
msg = new Message();
msg.obj = t;
mhandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}

byte b[] = new byte[200];
int nRecv = 0;
try {
nRecv = s.getInputStream().read(b);
String text = new String(b,0,nRecv);
Log.v("success", text);
t = text;
msg = new Message();
msg.obj = t;
mhandler.sendMessage(msg);
s.getOutputStream().write("yes,i am here!".getBytes());
s.getOutputStream().flush();
nRecv = s.getInputStream().read(b);
} catch (IOException e) {

e.printStackTrace();
}


super.run();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值