从服务通知活动

Posted

技术标签:

【中文标题】从服务通知活动【英文标题】:Notify activity from service 【发布时间】:2011-05-05 21:55:38 【问题描述】:

我正在尝试从我的Activity 启动一个Service 以查看网页上的更改,它是一个私人应用程序,所以我不会打扰电池寿命...

但我想将数据从我的Service 传递给我的Activity...我似乎找不到从我的Service 调用Activity 的方法。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

正如 Alex 所指出的,您可以绑定到服务并将某种侦听器或回调传递给服务以用于事件。

或者,您可以使用广播Intent,或者使用Intent 上的setPackage() 之类的方法来限制广播的范围。

或者,您可以使用createPendingResult() 创建一个PendingIntent,并将其作为Intent extra 传递给服务——然后服务可以使用该PendingIntent 在您的活动中触发onActivityResult()

或者,您可以使用ResultReceiver

或者,您可以使用Messenger

(诚然,我没有尝试过后两种方法,但我认为它们可以在这里工作)

【讨论】:

我正在尝试使用挂起的意图来调用 onactivityresult,但它根本没有被调用 Intent notificationIntent = new Intent(this, activity.class); notificationIntent.putExtra("captchaUrl", captchaUrl); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); @mars:你做的不是我写的。我写道:“或者,您可以使用createPendingResult() 创建一个PendingIntent,并将其作为Intent 额外传递给服务——然后服务可以使用该PendingIntent 在您的活动中触发onActivityResult()。 "我没有尝试将createPendingResult()Notification 一起使用,但我怀疑这行不通。请记住,您最初写的是“我想将数据从我的服务传递给我的活动”,这与 Notification 无关。 你是对的,但假设我想使用意图将数据发送到我的活动,我该怎么做?当我的活动获得意图时,它会调用什么事件? @mars:“你说得对,但假设我想使用意图将数据发送到我的活动,我该怎么做?” -- 如果您想从最初的 *** 问题更改场景,请提出一个新的 *** 问题,并充分解释您的场景,而不是“想要使用意图向我的活动发送数据”。【参考方案2】:

另一种选择:如果您的服务更新内容提供者,可以通过ContentObserver 通知活动。如果您的服务从服务器下载一些数据并且您只是想在活动中显示新内容,这就足够了。

【讨论】:

【参考方案3】:

一些丑陋的方法:

1.) 如果活动尚未开始,则使用intentstartActivity,但请记住intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

2.) 否则如果activity已经启动,你可以在activity中编写自己的回调方法,并在service中注册该方法,然后直接调用service中的方法。

希望能找到一些聪明的方法。

我认为广播也很好用,您可以编写一个静态内部类来接收广播并启动活动。但在我看来它也很丑。

【讨论】:

【参考方案4】:

ResultReceiver 机制已在另一篇文章中解释过:- Restful API service 但是,它并非在所有情况下都有效。请参考我对该帖子的评论。范围有限的广播或 PendingIntent 机制似乎更合适。

【讨论】:

以上是关于从服务通知活动的主要内容,如果未能解决你的问题,请参考以下文章

为啥挂起的意图在从服务的通知中调用时不会启动活动

从服务启动活动

如何从 Google Play 服务通知中检测意图

Android:如何从活动活动中关闭前台活动?

从 Android 设备上的服务器向应用发送通知

如何从科尔多瓦插件的服务中访问活动?