¿Cómo medir la velocidad actual de la red en el desarrollo de Android?
URL promedio
Envoltura com.panodic.settings.net;
Importar Java.io.bufferedreader;
Importar Java. .archivo;
importar Java .io .excepción de archivo no encontrado;
Importar Java .io .excepción de archivo. ;
Importar Java.io.inputstream;
Importar Java.io.inputstreamreader;
Importar Java.net.httpurlconnection;
Importar Java.net.malformedurexception;
Importar Java.net.URL;
Importar conexión Java.net.URL;
Importar configuración de com.pano DIC. .util.logutil;
Importar com.pano DIC.settings.util.netutil;
Importar com.pano DIC.settings.util.util;
Importar elemento com.pano DIC.settings.view.patch;
Importar Android.OS.bundle;
Importar Android.OS.handler;
Importar Android .OS.message;
Importar Android.app.activity;
Importar Android.view.menu;
Importar Android.view.view;
Importar vista de Android.
Botón Importar widget de Android. Android.widget.progressbar;
Importar Android.widget.textview;
Importar Android.widget.toast;
Importar com.pano DIC. ;
La clase pública MesureSpeed extiende la actividad implementa OnClickListener {
Int final estático privado LOADING = 0x 111;
Int final estático privado STOP = 0x 112 ;
Progreso privado mProgressState;
privado int mProgressState
TextView privado mSpeed
Botón privado medir velocidad;
Private PatchItem mBack
Flotador privado mSpeedContent
Cadena privada mAddr = ".
lgx. experto telefónico_221804. apk";
cadena privada maddr 2="/data/wise game/6f 9153 D4 a8d 1f7d 8/QQ apk";
cadena privada maddr 3="/data/. juego sabio/Baidu search_Android_10189_1399k.apk";
Manejador privado mHandler = new Handler(util.staskrunner.get looper());
privado int testCount = 0;
@override
protected void onCreate(Paquete de estado de instancia guardado) {
super .oncreate(savedInstanceState);
requestWindowFeature(Window.Feature número de título );
setContentView(r.layout.activity_mesure_speed);
m velocidad = (TextView)findViewById(r.id. velocidad _ contenido
mMeasureSpeed); = (Botón) findViewById (r . id . me sure _ speed);
m back = (elemento de parche) findViewById (r . id . patch _ settings _ net _ speed
mBar = (barra de progreso) findViewById (r . id . bar);
mmeasuespeed .setonclicklistener (this);
m back .setonclicklistener(this);
p>recuento de pruebas = 0;
}
@override
public void onClick(view v ) {
if (m atrás. es mi hijo (v)) {
util terminar (esto
} else if (v = = mMeasureSpeed ) {
mmeasespeed .set habilitado (falso);
mBar.setVisibility (ver.
visible);
mProgressState = 0;
recuento de pruebas = 0;
mbar . eliminar devoluciones de llamada (nulo);
mhandler.post retrasado(new Runnable(){
@override
public void runnable(){
Velocidad de medición (mAddr);
}
}, 0);
}
}
Manejador privado mProgressHandler = new Handler() {
@override
public void handleMessage(mensaje de mensaje) {
switch(message.content){< / p>
Boxeo:
mbar.set progreso(mProgressState);
Rotura;
Caso detenido:
mBar. setVisibility(view.gone);
setSpeed();
mmeasuespeed . :
Descanso;
}
}
};
Velocidad de anulación privada() { p>
if (mSpeedContent gt; = 1024) {
mSpeedContent = (flotante) ((mSpeedContent)/(1024 0.0));
mSpeedContent = (flotante) ( (int) (mSpeedContent * 10) 10 0.0)/10 (int) mSpeedContent);
m velocidad .mSpeedContent getString (r . string . m)); De lo contrario, {
m speed . settext ((int) mSpeedContent getString (r . string . kb)); > Medida de vacío privadoVelocidad (Cadena), Tostada. LENGTH_SHORT)
.
show();
mprogresshandler.sendemptymessage(STOP);
Retorno;
}
int fileLen = 0;
Tiempo de inicio largo = 0;
tiempo de finalización largo = 0;
Cadena final fileName = "tmp . apk"
HttpURLConnection conn = null
InputStream es = null
FileOutputStream fos = null
Archivo tmpFile =Nuevo archivo ("/SD card/temp");
if(!tmpfile.exists()){
tmpfile.mkdir();
}
archivo final archivo = nuevo archivo("/ SD card/temp/" fileName);
pruebe {
URL url = nueva URL (http URL);
pruebe {
conn = (HttpURLConnection) URL conexión abierta ();
Logutier. d("len="");
fileLen = conn. get contentlength();
logutil. d("len=" fileLen);
if (fileLen lt; = 0) {
mSpeedContent = 0;
mprogresshandler . sendemptymessage(STOP);
toast . r .string .conn_fail),
toast.length_short). show();
Retorno;
}
hora de inicio = system. hora actual millis();
es = conn. getinputstream();
fos = nuevo flujo de salida de archivo (archivo);
byte[]buf = nuevo byte[256];
conn.connect ( );
if (conn. getresponsecode() gt; = 400) {
toast make text(this, getString(r. string. no_time),
tostada. p>
tostada.longitud_corta).
show();
mprogresshandler.sendemptymessage(STOP);
Regresar;
}else{
mientras (verdadero){
if (es ! = null) {
int numRead = es .
if (numRead lt; = 0) {
Romper;
} else {
fos.write(buf, 0, numRead
}
mProgressState); =(int)(((numRead 0.0)/(fileLen 0.0))*1000000);
mprogresshandler . sendemptymessage(Cargando);
//logutil . " numRead " fileLen ="
// fileLen);
} else {
break;
}
}
}
hora de finalización = sistema . hora actual millis();
} captura (io excepción e) {
e.printstacktrace();
toast.make text(this, getString(r.string.no_permission),
toast.length_short). show();
}Finalmente {
if (conn!= null) {
conn.disconnect();
}
prueba {
if (fos != null) {
fos close();
}
<. p>if (es! = nulo) {es close();
}
} captura (excepción io e 1)
e 1. printstacktrace();
}
}
} catch(malformedurexception e) {
e. ();
}
mSpeedContent = fileLen/(hora de finalización-hora de inicio);
mprogresshandler.sendemptymessage(STOP);
}
}