我为Android 2.2编写了一些使用Android MediaPlayer播放音频文件的代码。在没有深入了解代码细节的情况下,我注意到存在一个名为
的函数isPlaying()
允许您检查MediaPlayer当前是否正在播放音频文件。因此,例如,当下面的代码片段运行时
Toast.makeText(getApplicationContext(), "Sound playing is: " +
mediaPlayer.isPlaying(), Toast.LENGTH_SHORT).show();
它显示以下消息
Sound playing is: true / false
取决于是否播放声音。
然而,当我使用Android MediaRecorder编写一些代码来录制麦克风的声音时,我注意到不看起来像是存在一个名为
的函数isRecording()
检查录制是否正在进行中。
所以,我想知道程序员是否有责任然后通过在代码中嵌入一些逻辑来确定录制是否正在进行中 - 或者是否确实存在这样做的方法(检查录制是否是正在使用Android API提供的另一个内置功能。</ p>
答案 0 :(得分:3)
毕竟看起来没有这样的功能。我认为尝试在代码中嵌入一些逻辑来干净利落地做是有道理的。
答案 1 :(得分:1)
我找到了一个很好的解决方法来处理这个问题,您可以立即阅读该解决方法,但我强烈建议您先阅读整个说明。
我试图找到一种方法来确定 mediarecorder 是否已开始录制,我认为在 start()
方法之后调用记录器上的 prepare()
方法就足够了,但它变成了出来,它不是。
在你被我刚才的话冒犯之前,让我解释一下场景......
我从头开始构建一个简单的录音应用程序,没有库,复制粘贴,所有的努力。所以我确切地知道我的代码的每一部分在做什么。或者至少我认为我做到了。
直到我决定尝试通过单击按钮开始和停止录音来破坏我的应用程序,就像我在弹钢琴一样。是的,直到 mediarecorder 的 start()
方法被调用时,我的停止按钮才出现。
所以我遇到了崩溃,logcat 用
java.lang.RuntimeException: stop failed.
at android.media.MediaRecorder.stop(Native Method)
一起
E/MediaRecorder(15709): stop failed: -1007
所以我在网上阅读并发现在 stop()
上的 start()
之后立即调用 MediaRecorder
会导致此问题。
所以最大的问题是,我如何检测现在启用记录仪上的停止按钮是否安全?
MediaRecorder.getMaxAmplitude() // The maximum absolute amplitude measured since the last call, or 0 when called for the first time
如您所见,MediaRecorder.getMaxAmplitude()
方法或 MediaRecorder.maxAmplitude
属性在第一次调用时返回 0,之后返回幅度。
因此,不是允许用户在调用 MediaRecorder.start()
后立即停止录制,而是等待 MediaRecorder.maxAmplitude
值大于零,此时我可以确定 MediaRecorder 已初始化、启动和录制,并且处于允许调用 stop()
的状态。 您可以使用 runnable 来完成此操作,它会不断检查直到幅度大于 0 。我已经在使用可运行的计时器,因此我执行了检查。
在模拟器上工作时,MediaRecorder.maxAmplitude
返回的值始终为 0。因此,您应该使用 Android 设备检查是否一切正常。
现在,当我第一次开始录制时,我的按钮保持禁用状态不到一秒钟。但是,如果我停止和启动得太快,它们会保持禁用一段时间,并且我会向用户显示“请稍候,正在录制”消息。
我希望这个答案对某人有所帮助。
问候!