AWS s3 TransferListener未在Android中更新

时间:2018-01-11 15:23:19

标签: android amazon-web-services amazon-s3 awss3transferutility

我正在尝试从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) {

            }
        }); 

感谢您的帮助

2 个答案:

答案 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" />