2016년 5월 17일 화요일

android ping 테스트 하는 소스 AsyncTask 이용

public class PingActivity extends Activity { 
    PingTask mTask; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
    } 

    @Override 
    protected void onResume() { 
        super.onResume(); 
        mTask = new PingTask(); 
        // Ping the host "android.com" 
        mTask.execute("android.com"); 
    } 

    @Override 
    protected void onPause() { 
        super.onPause(); 
        mTask.stop(); 
    } 

    class PingTask extends AsyncTask<String, Void, Void> { 
        PipedOutputStream mPOut; 
        PipedInputStream mPIn; 
        LineNumberReader mReader; 
        Process mProcess; 
        TextView mText = (TextView) findViewById(R.id.text); 
        @Override 
        protected void onPreExecute() { 
            mPOut = new PipedOutputStream(); 
            try { 
                mPIn = new PipedInputStream(mPOut); 
                mReader = new LineNumberReader(new InputStreamReader(mPIn)); 
            } catch (IOException e) { 
                cancel(true); 
            } 

        } 

        public void stop() { 
            Process p = mProcess; 
            if (p != null) { 
                p.destroy(); 
            } 
            cancel(true); 
        } 

        @Override 
        protected Void doInBackground(String... params) { 
            try { 
                mProcess = new ProcessBuilder() 
                    .command("/system/bin/ping", params[0]) 
                    .redirectErrorStream(true) 
                    .start(); 

                try { 
                    InputStream in = mProcess.getInputStream(); 
                    OutputStream out = mProcess.getOutputStream(); 
                    byte[] buffer = new byte[1024]; 
                    int count; 

                    // in -> buffer -> mPOut -> mReader -> 1 line of ping information to parse 
                    while ((count = in.read(buffer)) != -1) { 
                        mPOut.write(buffer, 0, count); 
                        publishProgress(); 
                    } 
                    out.close(); 
                    in.close(); 
                    mPOut.close(); 
                    mPIn.close(); 
                } finally { 
                    mProcess.destroy(); 
                    mProcess = null; 
                } 
            } catch (IOException e) { 
            } 
            return null; 
        } 
        @Override 
        protected void onProgressUpdate(Void... values) { 
            try { 
                // Is a line ready to read from the "ping" command? 
                while (mReader.ready()) { 
                    // This just displays the output, you should typically parse it I guess. 
                    mText.setText(mReader.readLine()); 
                } 
            } catch (IOException t) { 
            } 
        } 
    } 
}

댓글 없음:

댓글 쓰기