带有DownloadManager的Android获得总文件大小

时间:2015-09-30 09:39:33

标签: android file download cursor size

我研究了每个地方但没有任何解决方案。我有一个代码片段,在eclipse的调试模式下运行并正常获取总文件大小。但是当我运行项目时,sizeOfDownloadingFile的值只返回-1。请帮帮我,我用Android 22编译,提前谢谢。

 long id = downloadManager.enqueue(request);
            Cursor cursor = downloadManager.query(new DownloadManager.Query()
                    .setFilterById(id));
            if (!cursor.moveToFirst()) {
                Log.v("DownloadManagerService", "download list is empty");
                return;
            }
            int sizeOfDownloadingFile = 0;
            sizeOfDownloadingFile = cursor.getInt(cursor
                    .getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
            Log.d("DownloadManagerService",
                    "File size of film " + mFilm.getmTitle() + " is "
                            + sizeOfDownloadingFile);

2 个答案:

答案 0 :(得分:3)

如果您在主线程中调用代码,请尝试:

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                check here size of your downloading file
            }
        },500);

当您处于调试模式下载程序时,可以开始下载并且您具有有效值,但是如果您运行app normaly,则下载程序必须连接到服务器和doanload文件,这有时会比执行代码花费更多时间。

答案 1 :(得分:1)

我发现了问题,这是由方法setFilterById()处理引起的。在我将代码更改为此后,我现在可以得到正确的结果,但我推荐Adam的代码:

define(['jquery'], function($) {
$(function() {
    $('[my-controller]').each(function(e, t) {
        var a = $(t).attr('my-controller');
        'undefined' != typeof window[a] && $.isFunction(window[a]) ? window[a]($) : '';
    });
});