2017-06-27 21 views
0

AndroidでAsyncTaskとしてPingユーティリティを実装しようとしています。以下は基本的に私のdoInBackgroundの機能です。AndroidでPingタスクを実行するJava

mProcess = Runtime.getRuntime().exec("/system/bin/ping -c 6 " + url); 
    try { 
     InputStream in = mProcess.getInputStream(); 
     OutputStream out = mProcess.getOutputStream(); 
     byte[] buffer = new byte[ 1024 ]; 
     int count; 

     while((count = in.read(buffer)) != -1){ 
      mPOut.write(buffer, 0, count); 
      publishProgress(); 
      Log.d("PING TASK", "PING.... PING...."); 
      if(isCancelled()) { 
       return null; 
      } 
     } 

     out.close(); 
     in.close(); 
     mPOut.close(); 
     mPIn.close(); 
    } finally { 
     mProcess.destroy(); 
     mProcess = null; 
     Log.d("PING TASK", "DONE"); 
    } 
} catch(IOException e) { 
    Log.d("PING TASK", e.getMessage()); 
} 
return null; 

意図したとおりに機能しますが、私はandroid.comまたは8.8.8.8のように、応答アドレスにpingを実行する場合にのみ。しかし、私がintel.comまたはlalalalalalalaandroid.com(私はそれを正確にチェックしていない)のように、応答しないアドレスにpingを実行しない場合は、

PCでping -c 6 intel.comを実行すると、少なくとも最初の行PING intel.com (13.91.95.74) 56(84) bytes of data.またはPing request could not find host lalalalalalalaandroid.com Please check the name and try again.が表示されます。

しかし、私はこれらのアプリケーションを私のアプリケーションで手に入れません...何か私はここで行方不明ですか?

+0

Android搭載端末が特定のファイルシステムの場所だけでなく、「ping」ユーティリティを持つ必要はないことに注意してください。 – CommonsWare

+0

私は知っている、これは現時点では問題ではない。私はまあまあまあまあです。 – MadClown

+0

PCの代わりに 'adb shell'を介してコマンドを実行すると(別のping実装を実行する可能性があります)、あなたは何を得ますか? – adelphus

答えて

0

ドキュメントごとにAsyncTasksは1回しか実行できません。あなたのタイマーrunnableでそれを再初期化してみてください。

public void InitializeTimerTask() { 
    timerPingTask = new timerPingTask() { 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        new PingAsyncTask().execute(); 
       } 
      }); 
     } 
+0

ありがとうございますが、これはアクティビティのコードで処理されています。 タスクを複数回実行すると機能します。 – MadClown

関連する問題