如何使用服务来使用位置数据?

时间:2014-08-07 14:40:13

标签: android android-intent android-service android-location android-intentservice

由于我在应用程序的后台执行了长时间运行的任务,因此我正在尝试实施一项服务来完成工作。

此服务使用来自LocationClient实例的位置数据,并使用PendingIntent触发每个请求。最低目标版本阻止我使用新的LocationServices和Android文档建议我使用LocationClient.requestLocationUpdates(...)方法的PendingIntent版本,因为application may have been killed by the system

Every example I've看到哪些匹配类似的描述实现了IntentService并覆盖onHandleIntent(Intent intent),它接收意图KEY_LOCATION_CHANGED extra。但是,在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(...)并且意图没有在那里交付。我的问题是:如何在服务实现中使用位置数据?

如果我遗漏任何不清楚或需要更多信息,请告知我们。 谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

换句话说,服务并没有直接使用位置数据 - 请求它的个人,并通过制作Intent,附加相关数据并调用startService(...)将其转发回服务。 ,由Service.onStartCommand(...)接收。