3

我有一个在启动时启动的服务 S。它有一个 contentobserver C,它启动一个 intentservice X 来做一些处理。默认活动 A 由用户启动。

我想知道是否可以将 A 绑定到正在运行的服务 S 而不停止它,以便我可以将结果接收器 R 传递给 S,而 S 又必须传递给 X。

我想实现这一点,以便我可以再次启动 X,这次没有 C,从绑定服务 S 和 R 作为一个 parcelable extra。通过 R,每当运行时,进度对话框都会在 A 中更新。

在尝试使用 resultreceivers 运气之前,我使用的是来自支持库的通知。但问题是我正在为循环的每次迭代再次构建和显示它们。警报声反复播放了 300 多次,这令人不快。

尝试了广播的运气,但我有一些不好的经历。所以把它们扔掉了。

有没有其他方法可以解决这个问题?如果有办法通过重新构建来更新通知,我的问题就可以解决。

我正在使用 4.1.1 版本的 API 16,其中 setlatesteventinfo 似乎已被弃用。

我仍然愿意回到更新正在运行的通知的想法。或不同的解决方法。任何帮助将不胜感激。

编辑:

使用通知是实现此应用程序的一种方式,其中不需要 resultreceiver 和 ibinder 接口。

我在 API 级别 16 中找不到 setlatesteventinfo。我正在尝试使用 v4 支持库。在我的实现中,我为循环的每次迭代构建了一个新通知。但是我还没有想出一种方法来只在第一次而不是其余的时候保持声音警报。有没有人成功正确更新通知?

4

2 回答 2

6

我想知道是否可以将 A 绑定到正在运行的服务 S 而无需停止它

这当然是可能的。正如 Hoan 指出的那样,您需要从您的活动中调用 bindService() 。本文有一些关于如何做到这一点的示例代码。

至于您的其余问题,似乎可以分解为几个新问题。真的很难同时理解和回答。

于 2013-02-20T17:20:17.230 回答
3

绑定服务上的 android 文档说:

第三个参数是指示绑定选项的标志。它通常应该是 BIND_AUTO_CREATE 以便在服务尚未激活时创建服务。

仍然必须确认服务 S 的 onCreate() 不会再次被调用。

于 2014-09-29T22:51:10.593 回答