我们正在使用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)}
有什么办法可以同步启动交付服务吗?
答案 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