sinfrancis 发表于 2013-1-15 02:50:16

Android网络下载速度测试

开发工具:1. EC 2. SDK 1.1 3. ADT 0.8 原理:通过下载文件的大小,和当前读取的字节数,在固定的时间中检测速度,详细请看代码,我这里使用可一张图片做的测试:http://www.straitstimes.com/STI/STIMEDIA/image/20090324/BUSKING.jpg NetWorkSpeedInfo.java Android NetWork info
 
package cc.androidos.speed;/** * A class for android network info* @author Wang Baoxi * @version 1.0 * @since 2009-5-27 */public class NetWorkSpeedInfo{      /**Network speed*/    publiclong speed = 0;    /**Had finished bytes*/    publiclong hadFinishedBytes = 0;    /**Total bytes of a file, default is 1024 bytes,1K*/    publiclong totalBytes = 1024;      /**The net work type, 3G or GSM and so on*/    publicint networkType = 0;      /**Down load the file percent 0----100*/    publicint downloadPercent = 0;} SpeedActivity.java Activity
 
package cc.androidos.speed;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;/** ** @author Wang Baoxi * @version 1.0 * @since 2009-5-27 */public class SpeedActivity extends Activity{    /** Called when the activity is first created. */    TextView fileLength = null;    TextView speed = null;    TextView hasDown = null;    TextView percent = null;    String url = "";    ImageView imageView = null;    byte[] imageData = null;    NetWorkSpeedInfo netWorkSpeedInfo = null;    private final int UPDATE_SPEED = 1;    @Override    public void onCreate( Bundle savedInstanceState )    {      super.onCreate( savedInstanceState );      setContentView( R.layout.main );      hasDown = ( TextView ) findViewById( R.id.hasDown );      fileLength = ( TextView ) findViewById( R.id.fileLength );      speed = ( TextView ) findViewById( R.id.speed );      percent = ( TextView ) findViewById( R.id.percent );      imageView = ( ImageView ) findViewById( R.id.ImageView01 );      Button b = ( Button ) findViewById( R.id.Button01 );      url = getString( R.string.image_url );      netWorkSpeedInfo = new NetWorkSpeedInfo();      b.setOnClickListener( new View.OnClickListener()      {            @Override            public void onClick( View arg0 )            {                //down load the file thread                new Thread()                {                  @Override                  public void run()                  {                        imageData = ReadFile.getFileFromUrl( url,                            netWorkSpeedInfo );                        stop();                  }                }.start();                //get the speed , down load bytes ,update the view thread                new Thread()                {                  @Override                  public void run()                  {                        while ( netWorkSpeedInfo.hadFinishedBytes < netWorkSpeedInfo.totalBytes )                        {                            netWorkSpeedInfo.downloadPercent = ( int ) (( ( double ) netWorkSpeedInfo.hadFinishedBytes /                                     ( double ) netWorkSpeedInfo.totalBytes ) * 100);                            try                            {                              sleep( 1500 );                            }                            catch ( InterruptedException e )                            {                              e.printStackTrace();                            }                            Log.e( "update,send the message to update", "" );                            //update view                            handler.sendEmptyMessage( UPDATE_SPEED );                        }                                                //finished                        if( netWorkSpeedInfo.hadFinishedBytes == netWorkSpeedInfo.totalBytes )                        {                            netWorkSpeedInfo.downloadPercent = ( int ) (( ( double ) netWorkSpeedInfo.hadFinishedBytes /                                    ( double ) netWorkSpeedInfo.totalBytes ) * 100);                            handler.sendEmptyMessage( UPDATE_SPEED );                            Log.e( "update",                              ",send the message to update and stop" );                            stop();                        }                  }                }.start();            }      } );    }          /**   * Handler for post message into OS   */    private Handler handler = new Handler()    {      @Override      public void handleMessage( Message msg )      {            int value = msg.what;            switch ( value )            {                case UPDATE_SPEED:                  updateView();                  break;                default:                  break;            }      }    };    /**   * Update the view method   */    private void updateView()    {      speed.setText( netWorkSpeedInfo.speed + "bytes/s" );      hasDown.setText( netWorkSpeedInfo.hadFinishedBytes + "bytes" );      fileLength.setText( netWorkSpeedInfo.totalBytes + "" );      percent.setText( netWorkSpeedInfo.downloadPercent+"%" );      if( imageData != null )      {            Bitmap b = BitmapFactory.decodeByteArray( imageData, 0,                imageData.length );            imageView.setImageBitmap( b );      }    }} ReadFile.java Read file from web
package cc.androidos.speed;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import android.util.Log;/** ** @author Wang Baoxi * @version 1.0 * @since 2009-5-27 */public class ReadFile{    /**   * <p>   * Read file from web   * </p>   * @param url   * @param netWorkSpeedInfo   * @return   */    public static byte[] getFileFromUrl( String url,NetWorkSpeedInfo netWorkSpeedInfo )    {      int currentByte = 0;      int fileLength = 0;      long startTime = 0;      long intervalTime = 0;      byte[] b = null;                int bytecount = 0;      URL urlx = null;      URLConnection con = null;      InputStream stream = null;      try      {            Log.d( "URL:", url );            urlx = new URL( url );            con = urlx.openConnection();            con.setConnectTimeout( 20000 );            con.setReadTimeout( 20000 );            fileLength = con.getContentLength();            stream = con.getInputStream();            netWorkSpeedInfo.totalBytes = fileLength;            b = new byte;            startTime = System.currentTimeMillis();            while ( ( currentByte = stream.read() ) != -1 )            {                netWorkSpeedInfo.hadFinishedBytes++;                intervalTime = System.currentTimeMillis() - startTime;                if(intervalTime==0){                  netWorkSpeedInfo.speed = 1000;                }else{                  netWorkSpeedInfo.speed = (netWorkSpeedInfo.hadFinishedBytes / intervalTime ) * 1000;                }                if(bytecount<fileLength){                  b = ( byte ) currentByte;                }            }      }      catch ( Exception e )      {            Log.e( "exception : ", e.getMessage()+"" );      }      finally      {            try            {                if( stream != null )                {                  stream.close();                }            }            catch ( Exception e )            {                Log.e( "exception : ", e.getMessage() );            }      }      return b;    }} 
http://dl.iteye.com/upload/attachment/154537/c20095c9-e0e7-33d8-a850-e2ae8e2523cf.jpg
 
以上内容Sinfransis版权所有,专注请注明来自  http://mdev.cc/dev
页: [1]
查看完整版本: Android网络下载速度测试