如何将LocationRequest对象从活动传递到服务?

时间:2017-02-11 18:57:29

标签: android android-activity service geolocation

在我的应用程序中,我需要定期更新位置,检查Activity中的设置,然后使用LocationServices.FusedLocationApi在前台服务中请求该位置。 如何将LocationRequest对象从活动传递给服务?

Edit1 :服务从活动开始并绑定。但我无法理解如何传递该对象。

已解决:我想我已经解决了。我已经正确实现了绑定,然后我找到了这个答案:[1] How to send an object from one Android Activity to another using Intents? 我在服务中获得Parceable时犯了一个noob错误,导致了NullPointer,但我已经解决了。所以我想要的解决方案是: 使用Parceable (并正确实施;))

注意阅读此Shoaib评论:

  

Google建议不要使用intent将任何额外参数传递给服务,但可能无法在服务端看到,因为多个组件可以绑定到服务,并且不会始终调用onBind()。

2 个答案:

答案 0 :(得分:0)

Maybe you should study this

您将能够理解如何绑定和与服务通信(也涉及传递对象)。

针对您的编辑问题扩展答案:

当客户端(您的活动)使用onBind()方法绑定时,系统会调用您的服务bindService()方法返回 IBinder 。使用从onBind()返回的 IBinder 实例,调用者(您的活动)可以访问该服务的公共方法。您可以使用一个公共方法来向其发送参数/对象。

您可以进一步参考Google文档Here

答案 1 :(得分:0)

其中一个解决方案是EventBus库。 你可以从任何地方广播一个对象,并在你想要的任何线程上订阅该对象。 您可以在绑定此行后注册并订阅该事件:

    EventBus.getDefault().register(this);

例如在onStartCommand。

和onDestroy中的取消注册(取消订阅)

    EventBus.getDefault().unregister(this);