Android 使用 DownloadManager 获取总文件大小

Android with DownloadManager get total file size

我到处都研究过,但没有任何解决方案。我有一个 运行 的片段代码,并且在 Eclipse 的调试模式下正常获取总文件大小。但是当我运行项目时sizeOfDownloadingFile的值只有return-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);

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

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

当您处于调试模式时,下载器可能会开始下载并且您有一个有效值,但是如果您 运行 应用程序通常下载器必须连接到服务器并加载文件,这有时比执行你的代码。

我发现了问题,这是由方法setFilterById() 处理引起的。我把代码改成这样后就可以得到正确的结果了,不过我推荐亚当的代码:

id = downloadManager.enqueue(request);
        DownloadManager.Query query = new DownloadManager.Query();
        query.setFilterById(id);
        Thread.sleep(1000);
        cursor = downloadManager.query(query);
        if (!cursor.moveToFirst()) {
            Log.v("DownloadManagerService", "download list is empty");
            return;
        }
        int size = 0;
        size = cursor.getInt(cursor
                .getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
        Log.v("DOWNLOADING FILE SIZE", "File size of film " + f.getmTitle()
                + " is " + size);
        cursor.close();