第一步:163行,如果还没有连接上的ADB服务器的话就先连接上
第二步: 168行,确保ADB服务器已经启动
第三步: 183-185行,往ADB服务器发送监控命令,监控所有连接上来的移除的设备
第四步: 处理所获得的监控设备列表
我们先看第一步,在上一节中我们已经看到ADB服务器的启动过程了,但是我们还没有看到ADB客户端是怎么连接上服务器的,一下的代码就是一个实例:
255 private SocketChannel openAdbConnection()
256 {
257 Log.d("DeviceMonitor", "Connecting to adb for Device List Monitoring...");
258
259 SocketChannel adbChannel = null;
260 try {
261 adbChannel =
SocketChannel.open(
AndroidDebugBridge.getSocketAddress());
262 adbChannel.socket().setTcpNoDelay(true);
263 }
264 catch (IOException e) {}
265
266 return adbChannel;
267 }
代码8-4-4 DeviceMonitor - openAdbConnection
261行创建一个和ADB服务器监听的Socket端口的一个异步非阻塞SocketChannel连接,该连接就是专门用于往后往ADB服务器发送命令用的,返回给deviceMonitorLoop方法后会被保存到mMainAdbConnection中,请大家记住它,我们往下会用到它。
第二步关于如何调用startAdb来开启ADB服务器是上一节的重点,所以我们不会重新分析了。
第三步是向ADB服务器发送设备监控命令,我们跳进去:
272 private boolean sendDeviceListMonitoringRequest()
273 throws TimeoutException, IOException
274 {
275 byte[] request =
AdbHelper.formAdbRequest("host:track-devices");
276 try
277 {
278 AdbHelper.write(this.mMainAdbConnection, request);
279
280 AdbHelper.AdbResponse resp = AdbHelper.readAdbResponse(this.mMainAdbConnection, false);
281
282
283 if (!resp.okay)
284 {
285 Log.e("DeviceMonitor", "adb refused request: " + resp.message);
286 }
287
288 return resp.okay;
289 } catch (IOException e) {
290 Log.e("DeviceMonitor", "Sending Tracking request failed!");
291 this.mMainAdbConnection.close();
292 throw e;
293 }
294 }
代码8-4-5 DeviceMonitor - sendDeviceListMonitoringRequest