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();
我到处都研究过,但没有任何解决方案。我有一个 运行 的片段代码,并且在 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();