今天查了大把的资料,这东西还真搞死我了.在这里先声明,有些东西是网上的,这里也不是真正的操作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();
}