-
申 请 I D:用一句话描述
-
个人邮箱:764010928@qq.com
-
原创技术文章:
说明
我是一名Android开发,因为工作上需要远程调试不同的Android盒子,盒子的IP地址又经常变更,所以开发了一款可以扫码局域网内可以远程调试的设备,能够进行连接断开的软件,连接之后就可以通过命令行使用各种Android ADB命令了。
实现原理
-
通过循环ping 局域网的IP得到所有在线的设备ip,方法具体实现如下:
public static void startSeach(final OnSeachListener listener, final String port) {
count = 0;
listeners = listener;
for (int i = 1; i <= 255; i++) {
final int finalI = i;
executorService.execute(new Runnable() {
@Override
public void run() {
String ret = execCMD("ping 192.168." + port + "." + finalI + " -w 100 -n 1");
if (ret.indexOf("来自") >= 0 && isHostConnectable("192.168.80." + finalI, 5555)) {
Platform.runLater(new Runnable() {
@Override
public void run() {
listener.onSeach("192.168.80." + finalI);
}
});
}
countUp();
}
});
}
executorService.execute(new Runnable() {
@Override
public void run() {
while (true) {
if (count >= 255) {
Platform.runLater(new Runnable() {
@Override
public void run() {
listener.onEnd();
}
});
break;
}
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
-
通过循环判断每个在线设备的IP的端口5555 是否开放来判断是否可以ADB远程调试,判断方法如下:
public static boolean isHostConnectable(String host, int port) {
Socket socket = new Socket();
try {
socket.setSoTimeout(100);
socket.connect(new InetSocketAddress(host, port));
} catch (Exception e) {
return false;
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
-
如设备的5555端口是打开状态,那么就可以执行ADB连接,或者断开。
差不多就这样,不知道为何程序截图一直上传不上来,程序 源码和截图上传到百度云了:
https://pan.baidu.com/s/1pMbdFwZ
|