首页 > 解决方案 > Android AWS S3 库 - 同步上传

问题描述

我们正在使用 Android S3 库来上传内容。现在我们正在将我们的应用程序升级到目标 SDK 版本 26。

在我们的一项服务中,我们将所有请求存储在数据库中,并在发布工作时上传内容。我们确保互联网可用。

但是我们调用下面的行来上传文件,

final TransferUtility transferUtility = new TransferUtility(getS3Client(), ApplicationNekt.getContext());
final TransferObserver observer = transferUtility.upload(uploadConfig[0], uploadConfig[1], file);

这在内部调用 startService() 来启动它们的内部 TransferService。

        S3ClientReference.put(id, s3);
        final Intent intent = new Intent(appContext, TransferService.class);
        intent.setAction(action);
        intent.putExtra(TransferService.INTENT_BUNDLE_TRANSFER_ID, id);
        intent.putExtra(TransferService.INTENT_BUNDLE_TRANSFER_UTILITY_OPTIONS,
                        this.transferUtilityOptions);
        appContext.startService(intent);

所以这会使我们在 Oreo 中的应用程序崩溃,因为不允许使用后台服务。

Fatal Exception: java.lang.IllegalStateException
Not allowed to start service Intent { act=add_transfer cmp=com.ourapp/com.amazonaws.mobileconnectors.s3.transferutility.TransferService (has extras) }: app is in background uid UidRecord{62479b u0a200 LAST bg:+1m21s705ms idle procs:1 seq(0,0,0)}

有什么方法可以同步启动外卖服务吗?

标签: androidamazon-s3

解决方案


对于同步上传/下载,S3client 中有一个单独的 API。它上传和下载没有任何服务依赖。请参阅 S3 客户端中的 putObject 和 getObject。

    AmazonS3Client sS3Client = new AmazonS3Client(getCredProvider());
    PutObjectResult result = sS3Client.putObject(bucket, key, file);

https://github.com/aws/aws-sdk-android/issues/400#issuecomment-430712072

PS 从 2.7.x 版本开始,AWS 分离出了后台服务。那也是可以用的。 https://github.com/aws/aws-sdk-android/issues/400#issuecomment-423260044


推荐阅读