Anroid DownloadManager如何修改更新间隔

问题描述 投票:0回答:1

我尝试使用Android downloadManager从服务器获取文件,并确认它可以正常工作。

但是,COLUMN_BYTES_DOWNLOADED_SO_FAR值大约每1至2秒更改一次,因此程序栏不会平滑增加。有什么方法可以修改更新间隔?

boolean downloading = true;
int oldProgressValue = 0;
int lastProgressValue = 0;
long startTime = System.currentTimeMillis();

try {
    while (downloading) {
        DownloadManager.Query q = new DownloadManager.Query();
        q.setFilterById(downloadId);
        Cursor cursor = downloadManager.query(q);
        cursor.moveToFirst();
        int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

        cursor.moveToFirst();
        int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));

        if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
            downloading = false;
        }

        //0 ~ 100
        lastProgressValue = (int) ((bytes_downloaded * 100l) / bytes_total);

        Thread.sleep(50);

        if (timeOut > 0) {
            downloading = UpdateTimeOut(startTime, oldProgressValue, lastProgressValue);
        }

        if (oldProgressValue != lastProgressValue) {
            oldProgressValue = lastProgressValue;
            int finalOldProgressValue = oldProgressValue;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(String.valueOf(finalOldProgressValue));
                }
            });
        }
        cursor.close();
    }
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {

}

另外

Android Download Manager with progress dialog

相同的问题,我尝试作为答案,但没有解决。

Android DownloadManager Progress

我也对问题应用了答案,但没有获得更新的值。

android android-download-manager
1个回答
0
投票

我遇到了同样的问题,我所做的是调用此方法,该方法每次COLUMN_BYTES_DOWNLOADED_SO_FAR更改并使其看起来平滑时都设置一个ValueAnimator,>

   private fun updateProgressBar(progress: Int){
     runOnUiThread {
        val progressAnimator = ValueAnimator.ofFloat(pb_download_video.progress.toFloat(), progress.toFloat())
        progressAnimator.duration = 300
        progressAnimator.addUpdateListener {
            val value: Int = (it.animatedValue as Float).toInt()
            binding.pbDownloadVideo.progress = value
        }
        progressAnimator.doOnEnd { if (progress == 100) // action when is done loading }
        progressAnimator.start()
    }
}
    
© www.soinside.com 2019 - 2024. All rights reserved.