将Android下载管理器中的进度条设置为KB和MB而不是百分比

4
我正在尝试从URL下载图像,并需要显示文件大小和文件下载进度。
这是我现在拥有的。
 int bytes_downloaded = cursor.getInt(cursor
                        .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

 final int dl_progress = (int) ((bytes_downloaded * 100l) / bytes_total);
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        getFileSize(fileSizeInKB);
                        mProgressDialog.setProgress((int) dl_progress);

                    }
  });

As of now its showing %(ie..10/100)

如果我将其设置为mProgressDialog.setProgressNumberFormat("%1d kb / %2d kB"),它会显示为100kb中的1kb,但无法获取我正在尝试下载的文件的实际大小。
我需要它显示为1.2MB/3.6MB 问题在于进度显示如下所示60/100,但我不想要那个。

enter image description here


你说的“但是无法获取我正在尝试下载的文件的实际大小”是什么意思? - Blackbelt
@Blackbelt- 我无法理解如何在进度条中显示文件的实际大小,而不是百分比。 - coder
你有检查content-length是否设置吗? - Blackbelt
什么是确切的问题? - Blackbelt
好的。所以你的进度最大值是 bytes_total,对吗? - Blackbelt
是的,确切地说,那就是最大值。 - coder
1个回答

3

终于成功了:

以下是方法:

long  downloadedsize, filesize;
public static final double SPACE_KB = 1024;
public static final double SPACE_MB = 1024 * SPACE_KB;
public static final double SPACE_GB = 1024 * SPACE_MB;
public static final double SPACE_TB = 1024 * SPACE_GB;

将其设置为进度条

mProgressDialog.setProgressNumberFormat((bytes2String(downloadedsize)) + "/" + (bytes2String(filesize)));

方法:将字节转换为字符串
public static String bytes2String(long sizeInBytes) {

        NumberFormat nf = new DecimalFormat();
        nf.setMaximumFractionDigits(2);

        try {
            if ( sizeInBytes < SPACE_KB ) {
                return nf.format(sizeInBytes) + " Byte(s)";
            } else if ( sizeInBytes < SPACE_MB ) {
                return nf.format(sizeInBytes/SPACE_KB) + " KB";
            } else if ( sizeInBytes < SPACE_GB ) {
                return nf.format(sizeInBytes/SPACE_MB) + " MB";
            } else if ( sizeInBytes < SPACE_TB ) {
                return nf.format(sizeInBytes/SPACE_GB) + " GB";
            } else {
                return nf.format(sizeInBytes/SPACE_TB) + " TB";
            }
        } catch (Exception e) {
            return sizeInBytes + " Byte(s)";
        }

  }

如何查找 totallengthOfFile 的大小 - Gowthaman M
1
@Gowthaman M 看看这个:http://www.androiddeft.com/android-download-file-from-url-with-progress-bar/。可能有点晚了,但放在这里总是好的。 - Edw590

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接