android - 连续录制音频并更新 View

标签 android audio service

我需要在 Android 应用程序中连续(数小时)录制来自麦克风的未压缩音频,处理音频并在绘图中可视化结果。如果应用程序失去焦点,绘图可以(并且应该)停止,但记录和分析不应该。

我不确定我得到了正确的步骤,所以这是我想到的实现:

  • 一个 RecordActivity处理 View ,特别是在结果到达时绘制结果并处理按钮按下。一个 record按钮开始 RecordService
  • 一个 RecordService服务初始化 android.media.AudioRecord并在其AudioRecord.OnRecordPositionUpdateListener读取缓冲区,将其保存到文件并分析其内容。存储分析结果。
  • RecordService使用 PendingIntent将分析结果传达给 RecordActivity ,更新情节。
  • 当用户按下停止按钮时,RecordActivity通过调用 stopService 终止服务.

  • 我的问题是:
  • 为此使用服务是否正确,或者我可以只使用 Activity ?
  • 使用已启动的服务而不是绑定(bind)的服务是否正确?
  • 这个进程的哪些部分应该由不同的线程(甚至进程)处理? AudioRecord嗯? (分析显然取决于要求)。整个服务?
  • 该服务应该是前台服务吗?
  • 一般来说,这种结构是否正确?
  • 最佳答案

  • 一个 Service是一个很好的解决方案,我不明白你为什么要使用 PendingIntent .也许你应该考虑使用 LocalBroadcast和正常 Intent
  • 在这种情况下,由于服务绑定(bind)到 Activity 的生命周期, 我建议使用有界 Service :)
  • 这要看情况。如果 AudioRecording 实现有自己的线程(正如我在 Android 中猜想的那样),那么并不严格要求使用线程。但是,如果您将许多数据写入文件系统,最好在服务内部启动一个线程并在那里处理您的逻辑(请记住,服务不是线程)
  • 这取决于您的设计。如果您暂停 Service应用程序进入后台时的逻辑,没有必要。但是,如果即使应用程序进入后台,您也需要您的服务,那么最好使用前台 Service
  • 总的来说,我认为这是一个很好的解决方案
  • 关于android - 连续录制音频并更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023682/

    相关文章:

    android - $ 和 Android JNI 命名之后是什么?

    c++ - Juce中AudioSampleBuffer的延迟播放

    vb.net - 仅当作为服务运行时 ODP.NET ORA-12154 TNS 错误

    windows - 将 nginx 作为 Windows 服务运行

    asp.net-mvc-3 - Controller ->服务->存储库: Does service map Entity to ViewModel?

    java - 如何检测按钮按下状态?

    java - R.java 类出错,布局未找到但存在于 R.java 中

    android - 向应用程序发送通知。 (空气)

    HTML5 音频多重播放

    java - AudioClip没有声音-Java