安卓开发APP,我要ping通路由器
Posted 猛龙过江ing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发APP,我要ping通路由器相关的知识,希望对你有一定的参考价值。
玉律传佳节,青阳伴此辰。——(唐)冷朝阳《立春》
今天是2月3日,二十四节气中的第一个节气——立春。天气开始转暖,万物开始复苏。在这个充满希望的日子里,祝愿新冠疫情能够早日散去,藁城能够早日“搞成”,世界能够早日好起来。其实今天这篇博客没有太多的技术含量,就是感觉有些日子没发博客了,想写点东西,冒个泡,恰巧今天不算太忙,所以临时决定水一篇。
前一阵子有个任务,测试一个android设备能不能ping通一个网站或者路由器。我的第一反应就是写一个小的APP,实现ping的功能,然后返回结果给图形界面,应该不难。百度一下之后,果然有相关的东西。本着“我们不生产代码,我们只做代码的搬运工”的原则,经过一番“搬运”,最终实现了功能。其实也没什么好说的,直接上代码吧!
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity
TextView pingContent;
String address = "10.1.23.1";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pingContent = findViewById(R.id.ping_content);
RunHandler();
public void startPing(String ip)
int i = 0;
try
Process p = Runtime.getRuntime().exec("ping -c 1 -w 100 " + ip, null, null);
int status = p.waitFor();
InputStream input = p.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null)
buffer.append(line);
if (status == 0)
i++;
pingContent.setText("Ping " + ip + "进行中... " + i);
else
pingContent.setText("Fail: IP addr not reachable");
catch (IOException e)
pingContent.setText("Fail: IOException" + e.getMessage());
catch (InterruptedException e)
pingContent.setText("Fail: InterruptedException" + e.getMessage());
@SuppressLint("HandlerLeak")
private void RunHandler()
// 实时更新UI
final Handler mHandler = new Handler()
public void handleMessage(Message msg)
super.handleMessage(msg);
startPing(address);
;
Runnable mRunnable = new Runnable()
public void run()
while (true)
try
Thread.sleep(1000);
mHandler.sendMessage(mHandler.obtainMessage());
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
;
new Thread(mRunnable).start();
就新开了一个线程,一直在ping,根据返回的结果更新UI。
对了,APP还需要一些权限,具体需要什么我没有深究。我直接从之前一个需要联网的APP工程里把权限需求复制了过来,全都加上了。虽然简单粗暴了点,但是能拔脓的就是好膏药嘛。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
参考
1、实现一个不停发包的Android应用(类似于电脑上的Ping命令)
以上是关于安卓开发APP,我要ping通路由器的主要内容,如果未能解决你的问题,请参考以下文章