我想从我的Activity
开始Service
看出来的网页上的变化的活动,这是一个私人的应用程序,所以我也懒得电池寿命...通知从服务
但我'd想将我的Service
中的数据传递给我的Activity
...我似乎无法找到从我的Service
中拨打Activity
的方法。我怎样才能做到这一点?
我想从我的Activity
开始Service
看出来的网页上的变化的活动,这是一个私人的应用程序,所以我也懒得电池寿命...通知从服务
但我'd想将我的Service
中的数据传递给我的Activity
...我似乎无法找到从我的Service
中拨打Activity
的方法。我怎样才能做到这一点?
正如Alex所指出的那样,您可以绑定到服务并将某种监听器或回调传递给服务以用于事件。
或者,您可以使用广播Intent
,或许使用setPackage()
等方法来限制广播的范围。
或者,你可以使用createPendingResult()
以创建通作为Intent
额外的服务PendingIntent
- 那么该服务可以使用PendingIntent
在您的活动引发onActivityResult()
。
或者,您可以使用ResultReceiver
。您也可以使用Messenger
。
(当然,我没有尝试过这些后两种方法,但我认为他们会在这里工作)
的ResultReceiver机制已在另一篇文章中说明: - Restful API service 但是它不会在所有情况下工作。请参阅我对该帖子的评论。有限范围广播或PendingIntent机制似乎更合适。
一些丑陋的方式:
1)如果该活动尚未开始,然后使用intent
和startActivity
,但要记住intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2)否则,如果该活动已启动已经,你可以写您在活动中自己的回调方法并在服务中注册方法,然后直接调用服务中的方法。
希望找到一些聪明的方法。
我觉得广播也很好,你可以写一个静态的内部类来接收广播和开始活动。但在我看来,这也是丑陋的。
另一种替代方法:如果您的服务更新内容提供商,则可以通过ContentObserver通知活动。如果你的服务从服务器上下载了一些数据,而你只是想在活动中显示新的内容,这就足够了。
我正在尝试使用挂起的意图来调用onactivityresult,但它并没有被调用 – Mars 2010-11-06 13:36:37
意图notificationIntent = new Intent(this,activity.class); \t \t notificationIntent.putExtra(“captchaUrl”,captchaUrl); \t \t PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0); – Mars 2010-11-06 13:37:34
@mars:你在做什么不是我写的。我写道:“或者,您可以使用'createPendingResult()'创建一个'PendingIntent',将其作为额外的'Intent'传递给服务 - 服务可以使用'PendingIntent'来触发'onActivityResult()'在你的活动中。“我没有试图通过'Notification'使用'createPendingResult()',但是我怀疑这是行不通的。请记住,您最初写道:“我想将服务中的数据传递给我的活动”,这与“通知”无关。 – CommonsWare 2010-11-06 13:52:13