2

我正在尝试从 s3 下载并更新进度条。我设置了 TransferUtility、TransferObserver 和 TransferListener。

问题是,随着文件的下载,它很少更新进度。

对于 1.6mb (1665824) 的文件,它将输出 0,然后 30 秒后输出 1050264,然后 30 秒后输出 1665824,然后它会重复自身并再次输出 1665824。

所以基本上对用户来说,下载看起来像是被冻结或充其量是生涩的。

我还尝试将它放在一个循环中并检查每 100 毫秒的值,但它只是在前 3 秒内返回 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) {

            }
        }); 

谢谢你的帮助

4

2 回答 2

1

适用于 Android 的 AWS 开发工具包2.6.6版本包含用于修复进度更新问题的修复程序。升级到这个版本应该可以缓解这个问题。
除此之外,您还可以调整notificationThresholdAPIAmazonS3Client以更改通知进度的间隔。

于 2018-01-16T00:16:11.347 回答
1

添加此服务

    <service
        android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
        android:enabled="true" />
于 2020-11-07T09:04:45.430 回答