Android实现ping功能
  Andriod实现ping功能,输入需要ping的地址、ping的数据包个数和大小、以及每隔多久ping一次,ping功能比较耗时,所以在开启的子线程中进行,然后把ping结果发送到主线程中更新Textview显示结果。对结果可以有两种操作,一是复制,二是保存到本地SD卡中,方便以后查看。
  资源可以从http://download.csdn.net/detail/offerfinder/8903779免费下载,下面是效果图:
主界面:
结果:
对结果进行的操作:
  下面看具体代码:
布局文件:
/PING测试/res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/tv_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="IP地址"android:textSize="18sp" /><EditTextandroid:id="@+id/edit_ip"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="www.baidu.com" /><TextViewandroid:id="@+id/tv_3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="发送数据包的数目(个)"android:textSize="18sp" /><EditTextandroid:id="@+id/edit_count"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:text="4" /><TextViewandroid:id="@+id/tv_4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="发送数据包的大小(byte)"android:textSize="18sp" /><EditTextandroid:id="@+id/edit_size"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:text="64" /><TextViewandroid:id="@+id/tv_5"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="发送数据包的间隔时间(s)"android:textSize="18sp" /><EditTextandroid:id="@+id/edit_time"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="1" /><Buttonandroid:id="@+id/btn_ping"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bg_key_selector"android:text="PING" /></LinearLayout>

主Activity:

/PING测试/src/com/example/ping_test/MainActivity.java
package com.example.ping_test;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.support.v4.app.NavUtils;public class MainActivity extends Activity {Button btn_ping;EditText et_ip, et_count, et_size, et_time;String ip, count, size, time;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_ping = (Button) findViewById(R.id.btn_ping);et_ip = (EditText) findViewById(R.id.edit_ip);et_count = (EditText) findViewById(R.id.edit_count);et_size = (EditText) findViewById(R.id.edit_size);et_time = (EditText) findViewById(R.id.edit_time);btn_ping.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// String ip = et_ip.getText().toString();// String result = PingHost.Ping(ip);// tv_show.setText(result);// System.out.println("result ============= " + result);ip = et_ip.getText().toString();count = et_count.getText().toString();size = et_size.getText().toString();time = et_time.getText().toString();String countCmd = " -c " + count + " ";String sizeCmd = " -s " + size + " ";String timeCmd = " -i " + time + " ";String ip_adress = ip;String ping = "ping" + countCmd + timeCmd + sizeCmd + ip_adress;Intent intent = new Intent();intent.setClass(MainActivity.this, PingResult1.class);// new一个Bundle对象,并将要传递的数据传入Bundle bundle = new Bundle();bundle.putString("ping", ping);bundle.putString("ip", ip);bundle.putString("count", count);bundle.putString("size", size);bundle.putString("time", time);intent.putExtras(bundle);startActivity(intent);}});}}
显示ping结果Activity:
/PING测试/src/com/example/ping_test/PingResult1.java
package com.example.ping_test;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;public class PingResult1 extends Activity {private int CHOOSE = 0;TextView tv_show;String lost = "";// 丢包String delay = "";// 延迟String ip_adress = "";// ip地址String countCmd = "";// ping -cString sizeCmd = "", timeCmd = "";// ping -s ;ping -iString result = "";private static final String tag = "TAG";// Log标志int status = -1;// 状态String ping, ip, count, size, time;long delaytime = 0;// Myhandler handler=null;Handler handler1 = null;Thread a = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.pingresult);tv_show = (TextView) findViewById(R.id.tv_show);Intent intent2 = this.getIntent();Bundle bundle2 = intent2.getExtras();ping = bundle2.getString("ping");ip = bundle2.getString("ip");count = bundle2.getString("count");time = bundle2.getString("time");size = bundle2.getString("size");delaytime = (long) Double.parseDouble(time);Log.i(tag, "====MainThread====:" + Thread.currentThread().getId());tv_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubAlertDialog.Builder builder = new AlertDialog.Builder(PingResult1.this);builder.setTitle("请选择操作");String[] items = { "复制", "保存到SD卡" };builder.setSingleChoiceItems(items, 0,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubCHOOSE = which;}});builder.setNegativeButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stub// Toast.makeText(PingResult1.this,// "which="+which+"\nChoose="+CHOOSE,// Toast.LENGTH_SHORT).show();switch (CHOOSE) {case 0:ClipboardManager cm = (ClipboardManager) PingResult1.this.getSystemService(Context.CLIPBOARD_SERVICE);cm.setText(tv_show.getText());Toast.makeText(PingResult1.this, "复制成功!",Toast.LENGTH_SHORT).show();break;case 1:Date date = new Date();SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");String time = sfd.format(date) + ".txt";String text = tv_show.getText().toString();FileUtils fileUtils = new FileUtils();fileUtils.writeToSDFromStr(fileUtils.SDPATH+ "/PING/", time, text);Toast.makeText(PingResult1.this,"保存成功!" + fileUtils.SDPATH,Toast.LENGTH_SHORT).show();break;default:break;}CHOOSE = 0;}});builder.setPositiveButton("取消", null);builder.show();}});handler1 = new Handler() {// 创建一个handler对象 ,用于监听子线程发送的消息public void handleMessage(Message msg)// 接收消息的方法{// String str = (String) msg.obj;// 类型转化// tv_show.setText(str);// 执行switch (msg.what) {case 10:String resultmsg = (String) msg.obj;tv_show.append(resultmsg);Log.i(tag, "====handlerThread====:"+ Thread.currentThread().getId());Log.i(tag, "====resultmsg====:" + msg.what);Log.i(tag, "====resultmsg====:" + resultmsg);break;default:break;}}};a = new Thread()// 创建子线程{public void run() {// for (int i = 0; i < 100; i++) {// try {// sleep(500);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// }// Message msg = new Message();// 创建消息类// msg.obj = "线程进度 :" + i;// 消息类对象中存入消息// handler1.sendMessage(msg);// 通过handler对象发送消息// }delay = "";lost = "";Process process = null;BufferedReader successReader = null;BufferedReader errorReader = null;DataOutputStream dos = null;try {// 闃诲澶勭悊process = Runtime.getRuntime().exec(ping);// dos = new DataOutputStream(process.getOutputStream());Log.i(tag, "====receive====:");String command = "ping" + countCmd + timeCmd + sizeCmd+ ip_adress;// dos.write(command.getBytes());// dos.writeBytes("\n");// dos.flush();// dos.writeBytes("exit\n");// dos.flush();// status = process.waitFor();InputStream in = process.getInputStream();OutputStream out = process.getOutputStream();// successsuccessReader = new BufferedReader(new InputStreamReader(in));// errorerrorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String lineStr;while ((lineStr = successReader.readLine()) != null) {Log.i(tag, "====receive====:" + lineStr);Message msg = handler1.obtainMessage();msg.obj = lineStr + "\r\n";msg.what = 10;msg.sendToTarget();result = result + lineStr + "\n";if (lineStr.contains("packet loss")) {Log.i(tag, "=====Message=====" + lineStr.toString());int i = lineStr.indexOf("received");int j = lineStr.indexOf("%");Log.i(tag,"====丢包率====:"+ lineStr.substring(i + 10, j + 1));//lost = lineStr.substring(i + 10, j + 1);}if (lineStr.contains("avg")) {int i = lineStr.indexOf("/", 20);int j = lineStr.indexOf(".", i);Log.i(tag,"====平均时延:===="+ lineStr.substring(i + 1, j));delay = lineStr.substring(i + 1, j);delay = delay + "ms";}// tv_show.setText("丢包率:" + lost.toString() + "\n" +// "平均时延:"// + delay.toString() + "\n" + "IP地址:");// +// getNetIpAddress()// + getLocalIPAdress() + "\n" + "MAC地址:" +// getLocalMacAddress() + getGateWay());sleep(delaytime * 1000);}// tv_show.setText(result);while ((lineStr = errorReader.readLine()) != null) {Log.i(tag, "==error======" + lineStr);// tv_show.setText(lineStr);}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {if (dos != null) {dos.close();}if (successReader != null) {successReader.close();}if (errorReader != null) {errorReader.close();}} catch (IOException e) {e.printStackTrace();}if (process != null) {process.destroy();}}}};a.start();}
}

用于往SD卡写txt文本文件的工具类文件:

/PING测试/src/com/example/ping_test/FileUtils.java

package com.example.ping_test;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;import android.os.Environment;
import android.util.Log;
import android.widget.Toast;public class FileUtils {public String SDPATH;public String getSDPATH() {return SDPATH;}public void setSDPATH(String sDPATH) {SDPATH = sDPATH;}public FileUtils() {// 得到当前外部存储设备的目录// SDCARDSDPATH = Environment.getExternalStorageDirectory() + "/";}// 在SD卡上创建文件public File creatSDfile(String fileName) throws IOException {File file = new File(SDPATH + fileName);file.createNewFile();return file;}// 在SD卡上创建目录public File creatSDDir(String dirName) {File dir = new File(SDPATH + dirName);dir.mkdir();return dir;}// 判断SD卡上的文件是否存在public boolean isFileExist(String fileName) {File file = new File(SDPATH + fileName);return file.exists();}// 把InputStream里的数据写入到SD卡中去public File writeToSDFromIuput(String path, String fileName,InputStream input) {File file = null;OutputStream output = null;try {creatSDDir(path);file = creatSDfile(path + fileName);output = new FileOutputStream(file);byte buffer[] = new byte[4 * 1024];while ((input.read(buffer)) != -1) {output.write(buffer);}output.flush();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {try {output.close();} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}return file;}public void writeToSDFromStr(String path,String fileName,String str){File file=null;FileOutputStream fos=null;try {file=new File(path, fileName);fos=new FileOutputStream(file);//          fos.write(str.getBytes());
//          fos.write("\r\n".getBytes());
//          fos.write("I am lilu".getBytes());
//          fos.close();PrintWriter pw=new PrintWriter(fos,true);pw.println(str);;pw.close();Log.i("TAG", "====保存成功====:");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}

Android实现ping功能相关推荐

  1. Android网络测试--Ping命令

    在开发Ping过程中,由一个小白到懵懂开发,开发出功能后总结了一下Android开发Ping时的应该要注意的. 先不说别的上代码:(要是有兴趣就往下看看Ping的参数设置,我也只懂了几个参数设置) p ...

  2. 初探Android系统打印功能

    在Android平台上对激光打印机和喷墨式打印机进行了连接共享和打印效果测试.并对比Windows平台上的打印测试,分析其中的打印协议,现记录总结如下. 一.网络共享打印机 用户请求打印操作,会产生一 ...

  3. Android 实现闹钟功能

      原文地址:Android 实现闹钟功能作者:Android_Learners 一.手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以 ...

  4. android 添加附件功能,Android实现带附件的邮件发送功能

    本文实例讲解了基于基于jmail实现android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助gmail app客户端,缺点是必须使用gmail帐号 ...

  5. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  6. android p新功能_android 11今天发布这是新功能

    android p新功能 Google has just released the upgraded OS to select Pixel, OnePlus, and Xiaomi phones. A ...

  7. android 带清除功能的输入框控件

    今天,看到一个很好的自定义输入框控件,于是记录一下. 效果很好: 一,自定义一个类,名为ClearEditText package com.example.clearedittext;import a ...

  8. android 调用红外模块,Flutter调用Android模块的功能

    Flutter调用Android模块的功能,主要通过MethodChannel Flutter端 const MethodChannel _channel = const MethodChannel( ...

  9. windows开启ping功能

    方法/步骤 1.直接定位到控制面板中,选择[windows防火墙] 2.在windows防火墙页面左侧的列表中找到[高级设置]菜单 3.进入后在左侧找到"入站规则"点击后在中间部分 ...

  10. android 最新功能介绍,Android Studio 常用功能介绍

    界面介绍 讲解1 这个界面,显示了我们使用 Android Studio时经常接触到的功能面板. Project 面板. 用于浏览项目文件. Project 面板会显示当前的所有的 module .  ...

最新文章

  1. 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...
  2. jquery ztree异步搜索
  3. 数学表达式一键变图,CMU开发实用工具Penrose,堪称图解界LaTeX(附链接)
  4. C++细节系列(零):零散记录
  5. 论文浅尝 | 利用跨内和跨间信息的预训练实体关系编码器
  6. 【编程语言】Ruby完全自学手册
  7. 数组c语言什么时候学的,C语言学习之数组
  8. Visio 与 Access 2007 的集成应用
  9. 干货素材|UI设计师需要了解的APP弹窗模板
  10. mysql腾讯面试题_2020腾讯阿里精选面试题100+(包含答案)
  11. hive 建表_Hive建表和内外部表的使用
  12. javascript判断非空
  13. 【Oracle】删除重复记录
  14. LOJ #10130 点的距离
  15. 我奋斗了18年,不是为了和你一起喝咖啡。
  16. Ubuntu16.04安装网易云音乐后无法打开
  17. “Parallels Desktop” 已损坏,无法打开。您应该推出磁盘映像。处理办法
  18. SAP中标准价和移动平均价的学习笔记
  19. commit work php,GitHub - sbzhu/weworkapi_php: official lib of wework api
  20. TMB:肿瘤突变负荷简介

热门文章

  1. en开头的单词_大道至简:为什么记英语单词要先了解从拉丁语到法语的读音变化...
  2. android fmod,Android采用fmod库实现变声效果
  3. Real-Time Rendering——Chapter 11 Non-Photorealistic Rendering
  4. 系统设计=基于表面肌电信号的不同手势识别【MATLAB】
  5. 单溶水箱串级控制计算机控制,单容水箱液位控制系统
  6. Android支付接入(四):联通VAC计费
  7. sitemesh 2.4
  8. Qt5.10编写FTP客户端
  9. Java自学指南一、找一个开始并能坚持下去的理由
  10. postgres整库导入导出