0
点赞
收藏
分享

微信扫一扫

Android执行ping命令检查网络

Hyggelook 2022-08-04 阅读 69


因为ping要用到网络请求,所以要在AndroidManifest.xml加入网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

1、准备好ping命令

将IP或域名和一些参数组合成一条ping命令:

private String spellPing(String ip) {
String countCmd = " -c 4 ";
String sizeCmd = " -s 64 ";
String timeCmd = " -i 1 ";
return "ping" + countCmd + timeCmd + sizeCmd + ip;

}

2、执行ping命令

执行ping命令就是通过使用Runtime.getRuntime().exec(ping)。
Runtime.getRuntime().exec()可以执行各种各样的命令。

private void executePingCmd(String pingCmd){
executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Thread(new PingTask(pingCmd, pingHandler, 1)));
}

// 创建ping任务
private class PingTask implements Runnable {
private String ping;
private PingHandler pingHandler;
private long delay;

public PingTask(String ping, PingHandler pingHandler, long delay) {
this.ping = ping;
this.pingHandler = pingHandler;
this.delay = delay;
}

@Override
public void run() {
Process process = null;
BufferedReader successReader = null;
BufferedReader errorReader = null;
try {
// 执行ping命令
process = Runtime.getRuntime().exec(ping);
// success
successReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// error
errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String lineStr;

while ((lineStr = successReader.readLine()) != null) {

// receive
Message msg = pingHandler.obtainMessage();
msg.obj = lineStr + "\r\n";
msg.what = 10;
msg.sendToTarget();
}
while ((lineStr = errorReader.readLine()) != null) {

// receive
Message msg = pingHandler.obtainMessage();
msg.obj = lineStr + "\r\n";
msg.what = 10;
msg.sendToTarget();
}
Thread.sleep(delay * 1000);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {

if (successReader != null) {
successReader.close();
}
if (errorReader != null) {
errorReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}

if (process != null) {
process.destroy();
}
}
}
}

3、显示执行结果

通过Handler来通知主线程通知更新UI。

private static class PingHandler extends Handler {
private WeakReference<MainActivity> weakReference;

public PingHandler(MainActivity activity) {
this.weakReference = new WeakReference<>(activity);
}

@Override
public void handleMessage(@NonNull Message msg) {
switch (msg.what) {
case 10:
// 3、将结果显示出来
String resultMsg = (String) msg.obj;
weakReference.get().pingAdapter.addString(resultMsg);
weakReference.get().mRecylerView.scrollToPosition(weakReference.get().pingAdapter.getItemCount() - 1);
break;
default:
break;
}
}
}

​​具体demo已上传到GitHub​​。


举报

相关推荐

0 条评论