Android AWS S3库-同步上传

时间:2018-08-13 10:08:05

标签: android amazon-s3

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

在一项服务中,我们将所有请求存储在DB中,并在发布作业时上载内容。我们确保互联网可用。

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

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)}

有什么办法可以同步启动交付服务吗?

1 个答案:

答案 0 :(得分:1)

对于同步上载/下载,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

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