我目前正在开发一个Android项目,我们有一个录音机模块。
我正在使用MediaRecorder,除了在一些恼人的情况下,它正如预期的那样工作:
mRecorder = new MediaRecorder (); mRecorder.setAudioSource (MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat (MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile (mFileName3GP); mRecorder.setAudioEncoder (MediaRecorder.AudioEncoder.AAC); mRecorder.setAudioEncodingBitRate (96000); mRecorder.setAudioSamplingRate (48000); mRecorder.start ();
我显然不希望录音仍然在通话期间运行,但在其他情况下,我希望我的应用程序仍能正常执行录音。
我没有找到任何指向解决方案的东西。但是,我正在考虑唤醒锁(用于屏幕关闭)和AudioFocus(用于通知和来电)。
有什么建议吗?
谢谢, ANT1
答案 0 :(得分:1)
如果此逻辑嵌入到Acitivity
中,则会受到Android中常规生命周期更改的影响。即使您阻止某些正常操作发生,您也可以阻止/破坏设备的某些预期行为。也许这就是你想要的,但还有另一种方式。
您可以改为使用Service
:
http://developer.android.com/guide/components/services.html
http://developer.android.com/reference/android/app/Service.html
http://www.vogella.com/tutorials/AndroidServices/article.html
这将在后台运行,因此不会受到正常生命周期中断的影响,但您仍然可以通过BroadcastReceivers
和Intents
进行通信。
这需要一些额外的工作来处理两者之间的所有通信,并且可能是用户暂停/停止/重新开始录制的某种通知,或者在你的情况下有意义的任何通知。
<强>更新强>
在Android文档上发现这篇文章暗示您应该尝试暂停和开始录制以及暂停和开始的活动:
http://developer.android.com/guide/topics/media/audio-capture.html
也许这也有帮助。一条评论提到麦克风在拨打/接听电话时会停止输入。也许你正在尝试做的事情存在局限性: