我开发了一个应用程序,其中我有一个从Amazon s3服务器下载文件的ASyncTask。 由于相关文件非常大,我需要在下载发生时显示进度条,并且当螺旋进度条不断旋转并激怒用户时,螺旋进度条在这里看起来不太好。 我需要使用水平样式进度条,我需要知道要下载的文件的大小。 在从亚马逊s3下载之前,有没有人知道任何知道文件大小的方法。
这是我用过的下载代码..
@Override
protected Void doInBackground(Void... params) {
TransferManager manager = new TransferManager(access);
File file = new File(Environment.getExternalStorageDirectory()+"/Downloads", downFile);
fileDownloaded = "/Downloads/"+ downFile;
file.setWritable(true);
Download down = manager.download("files", fileToDown, file );
try {
down.waitForCompletion();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
'downFile'是我将其保存在外部目录中的文件位置。 'fileToDown'是要下载的服务器上的文件路径。 '/ Downloads /'是我创建的用于在设备上存储文件的新目录。
答案 0 :(得分:2)
我会假设你使用的代码是这样的,
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
// getting file length
int lengthOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
方法getContentLength()
将返回文件大小。
更新1:
我检查了亚马逊关于TransferManager和Download类的java文档。有方法和监听器可能有助于显示您的进度并尝试使用它们。
getProgress() //This will return TransferProgress object. See the links above
addProgressListener
我可以考虑设置progressListener。
更新2:
TransferProgress是一个对象,其中包含有关下载进度的大量信息。它具有传输的字节数,传输的总字节数和传输百分比。看一下方法细节。