两个android通过usb通信

需求:

现在有两个设备,都运行android系统,如何通过usb来通信?

准备知识:

  1. 两个通过usb连接起来的设备,有主次之分,一个是主设备,一个是从设备。
  2. 用来对android进行调试的usb口,称做otg口。这个口有两种用法。当android的otg连接的是电脑等设备时,电脑对android供电,电脑是主设备(称作host),android是从设备,。当android的otg连接的是u盘等设备时,android对u盘进行供电,android是host而u盘是从设备。
  3. android当然也可以有专用作host的usb口。
  4. android也自带adb调试工具,位于/system/bin目录下。
  5. 如果把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/*"

猜你喜欢

转载自my.oschina.net/kyle960/blog/1635268
今日推荐