当前位置: 代码迷 >> 综合 >> AndroidTools:网络工具-测试下载速度
  详细解决方案

AndroidTools:网络工具-测试下载速度

热度:10   发布时间:2024-01-14 13:24:43.0

AndroidTools Git地址:https://github.com/wisesun7/AndroidTools.git

? ???本方法的思路是,从远程服务器中实时下载一次测试文件,记录开始时间与结束时间,通过下载到本地的文件大小即可计算出实际下载速度。需要注意的是:

  • 一定要设置超时时间,防止网速过慢时,长时间处于下载过程,本方法中设置的为20秒
  • 测速完毕后删除本地已下载文件,防止占用存储空间
  • 测速要在子线程中进行,主线程可用动画标注进程
  • 本方法中使用的公司提供的服务器,因此地址无法公开,见谅~
   /**** @param NET_TEST_PATH 下载本地路径* @param NET_TEST_URL 远程下载路径* @return*/public float checkNetSpeed(String NET_TEST_PATH , String NET_TEST_URL) {
    float testSpeed = 0;int fileLength = 0;long startTime = 0;long endTime = 0;long middleTime = 0;final String fileName = "test.apk";HttpURLConnection conn = null;InputStream is = null;FileOutputStream fos = null;File tmpFile = new File(NET_TEST_PATH);if (!tmpFile.exists()) {
    tmpFile.mkdir();}final File file = new File(NET_TEST_PATH + fileName);try {
    URL url = new URL(NET_TEST_URL);try {
    conn = (HttpURLConnection) url.openConnection();fileLength = conn.getContentLength();if (fileLength <= 0) {
    Log.d(TAG, "fileLength <= 0");return 0;}startTime = SystemClock.uptimeMillis() / 1000;//startTime = System.currentTimeMillis() / 1000;is = conn.getInputStream();fos = new FileOutputStream(file);byte[] buf = new byte[256];conn.connect();if (conn.getResponseCode() >= 400) {
    Log.d(TAG, "conn.getResponseCode() = " + conn.getResponseCode());return 0;} else {
    while (true) {
    if (is != null) {
    int numRead = is.read(buf);if (numRead <= 0) {
    break;} else {
    fos.write(buf, 0, numRead);}} else {
    break;}middleTime = SystemClock.uptimeMillis()/1000;//设置超时时间20sif (middleTime - startTime >= 20){
    break;}}}endTime = SystemClock.uptimeMillis()/1000;//endTime = System.currentTimeMillis() / 1000;Log.d(TAG, "endTime = " + endTime);} catch (IOException e) {
    Log.e(TAG,"error message : " + e.getMessage());} finally {
    if (conn != null) {
    conn.disconnect();}try {
    if (fos != null) {
    fos.close();}if (is != null) {
    is.close();}} catch (IOException e1) {
    e1.printStackTrace();}}} catch (MalformedURLException e) {
    e.printStackTrace();}File readyFile = new File(NET_TEST_PATH + fileName);long downLength =  readyFile.length();Log.d(TAG,"downLength : " + downLength / 1024 / 1024);//删除本地已下载文件,防止占用存储空间FileUtils.deleteFile(NET_TEST_PATH + fileName);Log.d(TAG, "fileLength" + (fileLength / (1024 * 1024)));Log.d(TAG, "spend time" + (endTime - startTime));if ( (endTime - startTime) > 0){
    testSpeed = (downLength / (1024)) / (endTime - startTime);}else {
    testSpeed = 0;}return testSpeed;}