我有一个在启动时启动的服务S. 它有一个contentobserver C,它启动一个intentservice X进行一些处理。 默认活动A由用户启动。
我想知道是否可以将A绑定到正在运行的服务S而不停止它,这样我就可以将结果接收器R传递给S,而S又必须传递给X.
我想实现这一目标,这样我就可以再次启动X,这次从C中获取,从绑定服务S开始,R作为可分配的额外内容。 通过R,只要它运行,就会在A中更新进度对话框。
在尝试使用resultreceivers之前,我正在使用来自支持库的通知。 但问题是我正在为循环的每次迭代构建并再次显示它们。 警报声重复播放了300多次,令人不快。
我在广播中试过我的运气,但我遇到了一些糟糕的经历。所以把它们扔掉了。
还有其他解决方法吗? 如果有办法通过再次构建通知来更新通知,我的问题就可以解决了。
我正在使用4.1.1 build,API 16,其中似乎不推荐使用setlatesteventinfo。
我仍然愿意回到更新正在运行的通知的想法。 或者不同的解决方法。 任何帮助将不胜感激。
编辑:
使用通知是一种实现此应用程序的方法,其中不需要resultreceiver和ibinder接口。
我在API级别16中找不到setlatesteventinfo。我正在尝试使用v4支持库。在我的实现中,我为循环的每次迭代构建了一个新通知。但是我还没有找到一种方法来保持声音仅在第一次发出警报而不是其余部分。有没有人成功正确更新通知?
答案 0 :(得分:6)
我想知道是否可以将A绑定到正在运行的服务S而不停止它
这当然是可能的。正如Hoan指出的那样,您需要从您的活动中调用bindService()。 This article有一些关于如何执行此操作的示例代码。
至于你的其余问题,似乎可以分解为几个新问题。很难理解并立即回答所有问题。
答案 1 :(得分:1)
Bound Services上的Android文档说:
第三个参数是一个标志,指示绑定的选项。它通常应该是BIND_AUTO_CREATE,以便在服务尚未生效时创建服务。
仍然需要确认服务S的onCreate()不会再被调用。