Bob*_*amu 5 android android-download-manager
我正在创建一个进度条来显示 Android 下载管理器中下载 apk 的百分比,但DownloadManager.COLUMN_TOTAL_SIZE_BYTES总是返回-1,并且当下载完成时,它会返回文件大小。
String url = Config.GET_APK+ finalApk;
final DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.addRequestHeader("Authorization", token);
// in order for this if to run, you must use the android 3.2 to compile your app
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, finalApk);
Log.d("PATH1", String.valueOf(Environment.DIRECTORY_DOWNLOADS + "/" + finalApk));
// get download service and enqueue file
final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
final long downId = manager.enqueue(request);
Log.d("DOWNLOADID", String.valueOf(downId));
download.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
boolean downloading = true;
while (downloading) {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(downId);
Cursor c = manager.query(q);
c.moveToFirst();
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
download.dismiss();
}
final int bytes_download = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
final int bytes_total = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
Log.d("bytes_total", String.valueOf(bytes_total));
runOnUiThread(new Runnable() {
@Override
public void run() {
final double dl_prog = ((bytes_download * 100.0) / bytes_total);
download.setProgress((int) dl_prog);
}
});
c.close();
}
}
}).start();
}
},1000);
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用下载管理器总大小字节文档中的延迟+后解决方案,它表示它将返回,直到下载开始,然后它将返回下载大小。-1
就我而言,服务器没有发送文件的内容长度,我用一个简单的方法检查了它
URL url = new URL("URL");
url.openConnection().getContentLength();
Run Code Online (Sandbox Code Playgroud)
即使在这里,内容长度也是-1。
在服务器端修复后,DownloadManager 返回正确的COLUMN_TOTAL_SIZE_BYTES
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |