ブログのしゅーくりーむ

技術的なメモとかライフログとか。

自作Androidアプリからpingを実行する

自作Android アプリからネットワークの疎通確認がしたくて悩んだ件についてまとめてみる。

java.net.InetAddress のisReachable() メソッドを使えば、疎通確認が出来そうであった。
しかしながら、実際このメソッドを使用し疎通確認を行ってみるも、上手く行かない。
具体的には、ネットワークに明らかに接続出来ているのにfalse を返してくれたり・・・。

http://stackoverflow.com/questions/2935325/android-debugging-inetaddress-isreachable

ICMP による疎通確認はrooted な端末じゃなきゃ実行出来ず、ポート7 を使ってみるも上手く行っていないのだろうか。
ともかく方向転換する事に。シンプルに、Android 端末の持つping コマンドを使用する。

   /**
     * adb shell で実行可能なping コマンドを実行することでネットワークの疎通確認を行います
     *
     * @return 接続可能ならtrue, 不可能ならfalse
     */
    public static boolean ping(){
        Runtime runtime = Runtime.getRuntime();
        Process proc = null;
        try{
            proc = runtime.exec("ping -c 5 www.google.com");
            proc.waitFor();
        }catch(Exception e){}
        int exitVal = proc.exitValue();
        if(exitVal == 0)return true;
        else return false;
    }

$ping -c 5 www.google.com を実行し、その結果で接続状況を確認している。