- 开发工具:
- 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*/
- public long speed = 0;
- /**Had finished bytes*/
- public long hadFinishedBytes = 0;
- /**Total bytes of a file, default is 1024 bytes,1K*/
- public long totalBytes = 1024;
- /**The net work type, 3G or GSM and so on*/
- public int networkType = 0;
- /**Down load the file percent 0----100*/
- public int 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[fileLength];
- 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[bytecount++] = ( 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;
- }
- }
以上内容Sinfransis版权所有,专注请注明来自 http://mdev.cc/dev