如何在服务中正确调用startIntentSenderForResult?

时间:2014-05-14 07:58:28

标签: android android-service google-play-services

我正在使用Service来获取位置,并且我正在使用Google Play服务。

根据http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html#hasResolution%28%29,如果hasResolution()返回true,则调用startResolutionForResult可能会解决错误。但它需要Activity作为第一个参数。

当然ConnectionResult会在PendingIntent之前返回getResolution(),但Service不会像startIntentSenderForResult()一样Activity
据我所知,没有办法让结果回到Service

如何在Service中获得结果?还是有其他正确的方法吗?

修改

<击> Google Play服务SDK为后台任务提供GooglePlayServicesUtil.showErrorNotification。当然接受的答案是很好的解决方案。

编辑2:

showErrorNotification仅适用于isGooglePlayServicesAvailable的返回值。

1 个答案:

答案 0 :(得分:2)

我会这样做:

  1. 显示通知,指出执行任务X时出现问题 (实际上,与Google Play服务进行互动,但您可能会说些其他内容 更具体的应用程序)。

  2. 对于此通知,请提供启动您的活动的PendingIntent。作为此PendingIntent附加内容的一部分,传递ConnectionResult.getResolution() 提供的PendingIntent。 PendingIntents是可以分配的,所以这不应该造成问题。

  3. 在此活动的onCreate()中,从附加内容中获取原始 PendingIntent,然后使用它调用startIntentSenderForResult()。这会自动将用户重定向到Google Play服务需要他去的地方(可能是登录?)

  4. 然后,在onActivityResult()中,完成活动,首先通知您的服务(通过Intent)解决问题(或不解决)。暂时活动对用户来说是不可见的。

  5. 我承认这个解决方案是理论上的,但它应该有用。