The AWS Android SDK for S3 includes classes for data transfers. Namely, the TransferUtility
. The TransferUtility
seems to create a service for its own use.
Is it possible to use it from a service and in particular set the transfer listener and use it to send updates to application or create notifications from within said service?
Yes it's possible to start a service from another service.
TransferUtility
may fail to work if its Amazon S3 client gets garbage collected before TransferService
gets it. Normally an object is passed as a parcelable in an intent between components. However it's quite complicated to make S3 client parcelable. So the SDK takes an alternate route by passing a weak reference of it stored in a static map. The key is that the caller must keeps the S3 client alive before TransferService
gets it.
See https://github.com/aws/aws-sdk-android/issues/86 for more information.
Yes, its possible. But there are some steps you need to follow to make it work.
You can also add the TransferListener to your TransferUtiltiy object and use that show notification and upload progress.
Use Service instead of IntentService, because when you use TransferUtility.upload... the intent service does not wait for its completion etc and finishes instantly. So use Service class and write the uploading logic in onStartCommand method.
TransferUtility uses a Service named "TransferService". So running this service via TransferUtility from your service you need to put your service and the AWS TransferService in the same process in the manifest like.
<service
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true"
android:process=":sync" />
<service
android:name=".services.UploadService"
android:enabled="true"
android:process=":sync" />
UplaodService will be your own service that uses the TransferUtility