3

该应用程序正在 2.3.3 中开发

在我的应用程序中,我从广播接收器启动服务。该服务调用位置管理器并获取纬度和经度。是否可以将纬度和经度值从服务发送回广播接收器?

如是?我们该怎么做呢?

如果不?-> 这是我现在的方法...我使用 SharedPreferences 对象来保存这些值并在广播接收器中访问它们。这行得通吗?

我对此还有一些问题,将在答案后编辑我的问题......谢谢..

[编辑]回答我上面的问题->所以我们可以将数据从服务发送到广播接收器,尽管这通常不是一个好习惯。

4

2 回答 2

1

可以通过从具有位置数据的服务广播新的意图将信息传递回广播接收器。您需要为该意图创建一个自定义操作,并让您的广播接收器注册以处理该操作。此处描述了使用自定义操作创建和接收意图。

但是,我认为在几乎所有情况下,这都是一种不好的方法。一般来说,广播接收器应该只解析意图并启动意图服务来完成所有工作。如果需要对位置进行某些操作,那么服务应该做的不是广播接收器。同样重要的是要注意,在 onReceive() 结束时,广播接收器会立即被销毁,因此您会丢失其所有状态。

如果您提供有关经纬度收集任务目的的更多信息,我很乐意回答更多问题或更新我的答案以更具体。

[编辑] 因为我不能发表评论,所以我会在克里姆的回答中加两分钱。除非我遗漏了一些重要的东西(如果我遗漏了,请让我知道 Kerim,因为您可以评论我的)可能无法按您期望的方式工作。当广播接收器的onReceive()功能完成时,广播接收器将被销毁。您发送的处理程序将继续存在,但广播接收器中的任何数据都将不存在,并且处理程序将无法调用广播接收器的函数。由于处理程序无法访问任何广播接收器的数据或功能,因此您不妨在服务中完成所有需要完成的事情。

于 2012-11-29T07:21:23.863 回答
0

You can use Messenger class to communicate accross processes.

When you start a Service, pass a Messenger object as an extra. Then service after completing its job, can send latitude and longitude values back by calling messenger.send(message);

Messenger class takes a Handler object in its constructor. Any Message objects sent through this Messenger will appear in the Handler as if Handler.sendMessage(message) had been called directly.

Here is nice tutorial that explains in detail: http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler

于 2012-11-29T07:22:45.350 回答