需求:
现在有两个设备,都运行android系统,如何通过usb来通信?
准备知识:
- 两个通过usb连接起来的设备,有主次之分,一个是主设备,一个是从设备。
- 用来对android进行调试的usb口,称做otg口。这个口有两种用法。当android的otg连接的是电脑等设备时,电脑对android供电,电脑是主设备(称作host),android是从设备,。当android的otg连接的是u盘等设备时,android对u盘进行供电,android是host而u盘是从设备。
- android当然也可以有专用作host的usb口。
- android也自带adb调试工具,位于/system/bin目录下。
- 如果把android用作host的usb口,连接到另一个android的otg口上,那么这个android就可以运行自带的adb工具,对另一台android进行调试了。但运行adb的android必须要root。
实现:
当两个android需要通过usb进行通信的时候,可以用一个android用作host的usb口,连接到另一个android的otg口上,然后用adb向另一台android发送命令。adb有丰富的命令,可以发送广播,相互拷贝文件等。
也可以在java代码中运行adb命令。
public static String execRootCmd(String cmd) {
String result = "";
DataOutputStream dos = null;
DataInputStream dis = null;
try {
Process p = Runtime.getRuntime().exec("su");
dos = new DataOutputStream(p.getOutputStream());
dis = new DataInputStream(p.getInputStream());
Log.i(TAG, cmd);
dos.writeBytes(cmd + "\n");
dos.flush();
dos.writeBytes("exit\n");
dos.flush();
String line = null;
while ((line = dis.readLine()) != null) {
Log.d("result", line);
result += line;
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
例如,以下命令可以播放一个视频:
/system/bin/adb shell am start -a android.intent.action.VIEW -d "file:///mnt/sdcard/Download/ddnf.mp4" -t "video/*"