0

由于我有一个长期运行的任务要在我的应用程序的后台执行,我正在尝试实现一个服务来完成一项工作。

此服务使用来自LocationClient实例的位置数据,并且每个请求都使用 PendingIntent 触发。最低目标版本阻止我使用新的 LocationServices 和 Android 文档建议我使用 LocationClient.requestLocationUpdates(...) 方法的 PendingIntent 版本,因为应用程序可能已被系统杀死

见过的与类似描述匹配的每个示例都实现了一个 IntentService 并覆盖了 onHandleIntent(Intent intent) ,后者额外接收了 KEY_LOCATION_CHANGED 意图。 但是,Service 中没有这样的方法,并且没有像我预期的那样将这样的意图传递给 onStartCommand(...) 。

此代码用于设置对位置数据的请求,并且来自 LocationRequester 对象(任何时候都可以运行任意数量的这些,但是当只生成一个并发出请求时结果是相同的):

Intent intent = new Intent(context, MyLocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
locationClient.requestLocationUpdates(someLocationRequest, pendingIntent);

当我在上面的代码中使用 MyLocation*Intent*Service 时,Intent 将被传递到 MyLocationIntentService.onHandleIntent(intent),我会寻找额外的 KEY_LOCATION_CHANGED。对服务进行更改后,我不知道如何使用位置数据。我已确保在发出请求时已连接 LocationClient。

我试过监控 onStartCommand(...) 并且意图没有在那里传递。我的问题是:如何在服务实现中使用位置数据?

如果我留下任何不清楚或需要更多信息,请告诉我。谢谢!

4

1 回答 1

0

为自己找到了一个解决方案,虽然它不像我想要的那么干净。

我使用 Service 创建 Requester 对象,它们都是 LocationListener 的每个实现,并且只使用它们自己的请求。这意味着要放弃问题中的几个约束:(。Requester 对象将在接收到位置后(在覆盖的 onLocationChanged(...) 方法中,使用作为 Extras 的特定细节触发服务的意图。

换句话说,Service 并没有直接消费位置数据——请求它的个人做了,并通过制作 Intent、附加相关数据并调用 startService(...) 将其转发回 Service,这被拾取通过 Service.onStartCommand(...)。

于 2014-08-07T16:13:42.297 回答