我正在尝试从s3下载并更新进度条。我设置了TransferUtility,TransferObserver和TransferListener。
问题是,当文件下载时,它很少只更新进度。
对于1.6mb(1665824)文件,它将输出0,然后30秒后输出1050264,然后30秒后输出1665824,然后它会重复并再次输出1665824.
所以基本上对用户而言,下载是冻结的,或者最好是生涩的。
我也尝试将它放在一个循环中并检查值为100ms但它只是像听众那样在第一个秒返回0。
这就是我实施它的方式:
// Create s3 client and set region and endpoints
AmazonS3Client s3Client = new AmazonS3Client(IdentityManager.getDefaultIdentityManager().getCredentialsProvider(), new ClientConfiguration());
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
// Create a tranfer utility and attach to s3 client
TransferUtility transferUtility = TransferUtility.builder().s3Client(s3Client).context(getActivity()).build();
// String key for the file to download
String key = "ExampleVideo.mp4";
// Location to download files from S3
File file = new File(Environment.getExternalStorageDirectory().toString() + "/" + key);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// Bucket that contains the file to download
String bucket = "My_Bucket";
// Create a tranfer observer to download
TransferObserver observer = transferUtility.download(bucket,key,file);
// Attach listener to the download to listen for changes in the the download process
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
}
});
感谢您的帮助
答案 0 :(得分:1)
AWS SDK for Android 2.6.6
版本包含修复进度更新问题的修补程序。升级到此版本可以缓解此问题
除此之外,您还可以调整notificationThreshold
AmazonS3Client
API以更改通知进度的时间间隔。
答案 1 :(得分:0)
添加此服务
<service
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />