Service或IntentService录音后播放音频

3
我希望实现以下目标:
  • 录制音频
  • 将音频发送到服务器
  • 播放音频
我知道前两个任务可以通过使用Service来完成,因为我在之前的一个应用程序中已经做过了,但是当涉及到播放音频文件时,它需要从Activity中触发。
因为通过使用BroadcastReceiver可以从Service访问Activity,但如何从Activity访问Service的方法呢?
那么,现在的问题是:是否要使用Service本身来播放音频(也可以从Activity触发)或使用IntentService
文档说,

没有简单或直接的方式从IntentService直接与用户界面交互。

使用IntentService启动的任何任务都不能被中断

我可能想随时停止录制并随时播放。
哪种方式最适合这个要求 -> Service还是IntentService??
非常感谢您的任何建议。

但正如问题中已经提到的,录制结束可能会从一个活动中触发,而文档则说“使用IntentService启动的任何任务都无法被中断”。 - GAMA
我说过,一旦录制音频,使用Intent Service进行上传。播放可以在UI线程上完成。 - Raghunandan
我了解在UI线程上播放音频的问题。那录制音频呢? - GAMA
@GAMA: "...播放音频文件,它需要从一个Activity中触发。" :为什么?我不明白你的意思。 - Squonk
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - GAMA
显示剩余5条评论
1个回答

8
我建议您使用一个Service而不是IntentService
具体来说,使用一个绑定的Service,它允许在ActivityService之间进行双向通信。 IntentService类设计用于一次性操作,使用自己的工作线程。一旦线程上的工作完成,线程就会终止,并且IntentService调用stopSelf()来终止自身。这意味着用户通过ActivityIntentService之间的任何交互都是有问题的。
另一方面,绑定的Service将一直存在,直到明确停止或者最后一个绑定组件取消绑定。这允许更长期的交互。
对于播放,Service在UI线程上运行并不是问题,如果您使用像MediaPlayer这样的东西,它会为播放目的处理自己的线程。
进一步来说,如果您使用绑定的 ServiceMediaPlayerMediaController,您可以从 Activity 控制播放、停止、暂停、搜索等功能。

编辑:有关更多信息,请参见... 绑定服务


可以。你能简要说明一下“绑定服务”的意思吗? - GAMA
@GAMA:我只能指向Android开发者网站上绑定服务的指南(请参见我的答案底部的编辑)。它看起来很复杂,但实际上并不那么糟糕。忽略有关IPC和AIDL的任何内容,因为它们是用于访问其他进程中的服务。在您自己的应用程序中创建绑定服务非常简单直接。 - Squonk
这个链接是否是一个好的参考点:http://www.techotopia.com/index.php/Android_Local_Bound_Services_%E2%80%93_A_Worked_Example? - GAMA
@GAMA:是的,那看起来是一个很好的基本解释和示例。一旦你理解了BinderServiceConnection的概念,使用绑定服务就相当简单了。祝你好运。 - Squonk
@GAMA 这里有另一个 https://thenewcircle.com/s/post/60/servicesdemo_using_android_services 展示如何使用绑定服务。 - Raghunandan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接