Android代码中使用Ping命令
项目中需要搜索同一WIFI局域网中的设备并进行通信,暂时想到的办法是得到局域网网段的地址,因为同一局域网中的IP地址前三位是相同的,而第四位的范围从0~250,所以对第四位进行遍历搜索,能ping通的IP加入在线列表,再用IP进行通信。由于遍历过程非常耗时,需要开启多线程去PING.开销不能太大,最多开启30个线程。
需要在Android中使用LInux底层的命令:
如执行Ping命令 格式为 ping -c 1 -w 5
其中参数-c 1是指ping的次数为1次,-w是指执行的最后期限,单位为秒,也就是执行的时间为5秒,超过5秒则失败.
Ping命令代码:
Process p = Runtime.getRuntime().exec("ping -c 1 -w 5 " + ip);
主要的代码部分:
public void runPingIPprocess(final String ipString)
{
final Thread pingThread = new Thread()
{
@Override
public void run()
{
try
{
Log.i("Light", "ip address" + ipString);
// ping ip地址
Process p = Runtime.getRuntime().exec(
"ping -c 1 -w 5 " + ipString);
int status = p.waitFor();
if (status == 0)
{
Log.i("Light", "ping ip");
Map<String, Object> map = new HashMap<String, Object>();
map.put("ip", ipString);
ping.add(map);
pingSize++;
if (pingSize > 10)
{
pingSize = 0;
// setPing(ping);
mUpdaHandler.sendMessage(createMessage(RESULT_MESSAGE, ping));
}
} else
{
}
threadCount--;
} catch (Exception e)
{
threadCount--;
Log.e("Light", e.getLocalizedMessage());
} finally
{
}
}
};
pingThread.start();
}
主要来讲讲 Runtime.exec这个方法
Runtime 封装着java程序的运行时环境。通过Runtime实例,java应用能够与其运行的环境连接。Runtime在jvm中保持一个单例,所以不能通过Runtime类的构造函数。只能通过Runtime.getRuntime()来获的当前Runtime的一个实例。获得Runtime实例后,就可以通过Runtime的exec()方法在当前jvm进程外启动其他进程了。
在Runtime类中存在四个exec()重载方法
public Process exec(String command);
public Process exec(String [] cmdArray);
public Process exec(String command, String [] envp);
public Process exec(String [] cmdArray, String [] envp);
对于每个这样的方法,都会产生一个命令,并可能携带一组参数——被传递给一个特定操作系统的函数调用。随后创建一个特定操作系统的进程(一个运行着的程序),procss类将持有该程序返回Java VM的引用。这个procss类是一个抽象类,具体子类的实现依赖于不同的底层操作系统。
你可以通过三种可能的输入参数到这些方法:
1、一个字符串,表示程序执行和程序的任何参数。
2、一个字符串数组,通过参数来区分出程序的实现功能。
3、一个环境变量的数组
传递环境变量是,使用格式化的方式:名称=值。如果你使用单个字符串和它的参数的方式调用exec()的重载,,注意字符串是通过StringTokenizer类被解析,使用空格作为分隔符
关于Runtime类使用陷阱可以看看这篇文章:
http://www.cfanz.cn/index.php?c=article&a=read&id=33583
完整的实例代码:
http://download.csdn.net/detail/u011176244/6348059
Android代码中使用Ping命令的更多相关文章
- Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果
Android代码中设置字体大小,字体颜色,显示两种颜色 在xml文件中字体大小用的像素 <TextView android:id="@+id/uppaid_time" an ...
- Qt5.2中使用ping命令实现Ip扫描功能
在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令.如果使用Qt编程实现,主要会用QThread.QProcess这两个类.关于这两个类的具体用法可以查阅Qt助手 ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
- Android代码中动态设置图片的大小(自动缩放),位置
项目中需要用到在代码中动态调整图片的位置和设置图片大小,能自动缩放图片,用ImageView控件,具体做法如下: 1.布局文件 <RelativeLayout xmlns:android=&qu ...
- Android用PhoneGap封装webapp在android代码中实现连按退出和loadingpage
用PhoneGap封装后的程序有一些瑕疵,比如启动时黑屏,菜单按钮和返回按钮不好控制等. PhoneGap也在github提交的它的源码(版本:2.8): https://github.com/apa ...
- Android代码中实现WAP方式联网
无论是移动.联通还是电信,都至少提供了两种类型的的APN:WAP方式和NET方式.其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号 ...
- android代码中自定义布局
转载地址:http://blog.csdn.net/luckyjda/article/details/8760214RelativeLayout rl = new RelativeLayout(thi ...
- android 代码中使用textAppearance
一开始在代码中我以为使用tvAge.setTextAppearance(context, resid);这样的的方式就能行, 运行之后发现这个设置并未生效,于是到处搜索在代码中设置系统样式的的解决方法 ...
- Android 在Android代码中执行命令行
1.路径最好不要是自己拼写的路径/mnt/shell/emulated/0/wifidog.conf 最好是通过方法获取的路径,不然可能导致命令无效 (挂载点的原因) public static f ...
随机推荐
- css怎么写链接到图片和地址
- Android 里面的小坑
1.listview加了个blockdescen,竟然导致editTextView不能获取焦点
- WORDPRESS 后台500错误解决方法集合
引自: http://www.guuglc.com/565.html 这篇文章本质上我是不可能会写到,就因为7号那天晚上,我准备搬家的时候,发现前台完好,进入后台却500错误. 这时我就得急的,毕竟明 ...
- mysql嵌套查询
select * from(select t.`name` `name`,count(*) count from company t group by t.`name`) aa where aa.co ...
- CSS和JS样式属性对照表
注意:1.CSS中的float属性是个例外,因为float是javascript的保留关键字,在IE中使用的是styleFloat,而其他浏览器则使用cssFloat. 盒子标签和属性对照 CSS语法 ...
- 使windows server 2003 开机不显示登录页面
1.运行“regedit”,以打开“注册表管理器”:运行注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersi ...
- Codevs 1191 数轴染色
1191 数轴染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色. ...
- Trac与Apache的配合
将Trac与Apache配合使用,需要用到mod_wsgi模块,首先Apache要安装负责wsgi的模块. def application(environ, start_request): #... ...
- mui h5 动态实现数据的移除和数据操作完后的重新获取
HTML 代码 <ul class="mui-table-view" id="OA_task_1"> <li class="mui- ...
- yii2源码学习笔记(十四)
Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...