安卓开发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命令)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以使用以下代码生成一个可以ping其他IP的安卓应用: ``` public class PingActivity extends Activity { private EditText mEditText; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ping); mEditText = (EditText) findViewById(R.id.editText); mTextView = (TextView) findViewById(R.id.textView); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ip = mEditText.getText().toString(); if (TextUtils.isEmpty(ip)) { Toast.makeText(PingActivity.this, "请输入IP地址", Toast.LENGTH_SHORT).show(); return; } new PingTask().execute(ip); } }); } private class PingTask extends AsyncTask<String, Void, Boolean> { @Override protected Boolean doInBackground(String... params) { String ip = params[0]; try { Process process = Runtime.getRuntime().exec("/system/bin/ping -c 1 " + ip); int status = process.waitFor(); return status == 0; } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return false; } @Override protected void onPostExecute(Boolean result) { if (result) { mTextView.setText("Ping成功"); } else { mTextView.setText("Ping失败"); } } } } ``` 这个应用程序包含一个文本框和一个按钮。用户可以在文本框中输入要ping的IP地址,然后点击按钮来执行ping操作。应用程序使用Android的Runtime类来执行ping命令,并在执行完成后显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值