android - 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)}
有什么方法可以同步启动外卖服务吗?
解决方案
对于同步上传/下载,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
推荐阅读
- django - 无法单击 Selenium 中的元素,因为“对象遮挡了它”
- reactjs - 反应阿波罗。writeQuery 和 writeFragment 的区别?
- typescript - forEach 的 TypeScript 类型缩小错误
- angular - 新文件未使用项目配置
- python - 获取 IndexError:列表分配索引超出范围
- java - 如何创建用于哈希表的通用对象数组?
- ios - 无法将我的应用与 Google AdMob 关联
- javascript - JAVASCRIPT 函数在某个时间间隔运行一个函数,即使在网页关闭之后
- android-studio - Kotlin - menuInflater 找不到 xml 文件的引用
- javascript - 以编程方式选择浏览器中未更新的选项