How to get results from an IntentService back into an Activity?

You should look at creating your own ResultReceiver subclass in your activity. ResultReceiver implements Parcelable so can be passed from your Activity to your Service as an extra on the Intent.

You’ll need to do something like this:

  1. Implement a subclass of ResultReceiver within your activity class. The key method to implement is onReceiveResult(). This method provides you a with Bundle of result data which can be used to pass whatever information you are retrieving in your Service. Simply unpack the data you need and use it to update your activity.

  2. In your activity, create a new instance of your custom ResultReceiver and add it to the Intent you use to start your service.

  3. In your Service‘s onStartCommand() method, retrieve the ResultReceiver passed in on the Intent and store it in a local member variable.

  4. Once your Service completes its work, have it call send() on the ResultReceiver passing whatever data you want to send back to the activity in a Bundle.

This is a pretty effective pattern and means you’re not storing data in nasty static variables.

Leave a Comment