How Can I call startIntentSenderForResult in Service properly?
android, android-service, google-play-services
Solution
I would proceed this way:
Show a notification indicating that there is a problem doing task X (actually, interacting with Google Play Services, but you may say something else more specific to your app).
For this notification, provide a `PendingIntent` that starts your activity. As part of the extras for this PendingIntent, pass the PendingIntent provided by `ConnectionResult.getResolution()`. PendingIntents are parcelable so this shouldn't pose a problem.
In `onCreate()` for this Activity, obtain the original `PendingIntent` from the extras, then call `startIntentSenderForResult()` with it. This will automatically redirect the user to wherever Google Play Services needed him to go (possibly log-in?)
Then, in `onActivityResult()`, finish the activity, having first notified your service (via an Intent) that the problem is resolved (or not). The transient activity will have been invisible to the user.
I admit this solution is theoretical, but it should work.
Problem
I'm working on a `Service` which gets a location and I'm using Google Play Services for it. According to http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html#hasResolution%28%29, if `hasResolution()` returns `true`, calling `startResolutionForResult` may resolve an error. But it needs an `Activity` as first parameter. Of course `ConnectionResult` returns a `PendingIntent` by `getResolution()` but the `Service` doesn't have a `startIntentSenderForResult()` like an `Activity`. As far as I know, there is no way to get a result back in a `Service`. How can I get a result in the `Service`? Or is there another proper way? Edit: Google Play Service SDK provides GooglePlayServicesUtil.showErrorNotification for background tasks. Of course accepted answer is good solution. Edit 2: `showErrorNotification` is only for a return value of `isGooglePlayServicesAvailable`.