安卓开发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通路由器的主要内容,如果未能解决你的问题,请参考以下文章

为啥能ping通 但是连不上 app

samrt210开发板ping-系列问题(开发板ping通主机,主机ping通虚拟机,唯独~开发板ping不通虚拟机)

怎么设置才能让两台虚拟机和主机两两ping通

虚拟机无法ping通GNS3里的路由

同一路由器下两台电脑ping不通 都能ping通路由器

华为eNSP直连路由无法ping通