小编Nej*_*sis的帖子

没有 API < 26 的虚拟方法 MediaRecorder.setOutputFile?

我正在我的应用程序中录制音频,我正在努力处理 MediaRecorder 类

import android.media.MediaRecorder;
Run Code Online (Sandbox Code Playgroud)

问题是代码可以编译但似乎无法在 API 级别 < 26 的设备上运行,因为MediaRecorder.setOutputFormat()根据 Android Studio 中的内联错误消息,该函数显然在API 26 之前不存在。同样,当我在带有 API 24 的模拟器上运行代码时,我会因运行时错误而崩溃:

java.lang.NoSuchMethodError: No virtual method setOutputFile(Ljava/io/File;)V in class Landroid/media/MediaRecorder; or its super classes (declaration of 'android.media.MediaRecorder' appears in /system/framework/framework.jar)
Run Code Online (Sandbox Code Playgroud)

作为快速修复,我只是将 gradle 文件中的最小 SDK 级别增加到 26,并且一切正常。但是,我不希望我的应用仅限于 Android 8.0 及更高版本,因为 7.x 仍然如此受欢迎。

所以我的第一个问题是:怎么可能整个MediaRecorder库只有一个功能不可用,人们如何使用MediaRecorder之前的API 26?我在网上找不到任何关于它的信息。

第二个问题:如何解决问题,以便为 API 级别 24+ 录制音频?我必须使用另一个图书馆吗?

这是我的活动的一部分,我正在设置录音机并开始录音。同样,当最小 SDK 为 26 时,这可以正常工作......

private MediaRecorder recorder;

private void startRecording(){
    if(!recordingActive) {
        recorder = new …
Run Code Online (Sandbox Code Playgroud)

audio android nosuchmethoderror mediarecorder

2
推荐指数
1
解决办法
1873
查看次数

标签 统计

android ×1

audio ×1

mediarecorder ×1

nosuchmethoderror ×1