android ping ip 代码,Android执行ping命令检查网络

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

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 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;

}

}

}

标签:String,ping,网络,private,pingHandler,msg,Android,null

来源: https://blog.csdn.net/weixin_40763897/article/details/100134430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值