No virtual method setOutputFile Ljava/io/File V in class Landroid/media/MediaRecorder

今天在使用MediaRecorder时进行音频录制时报错 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) 如下图:No virtual method setOutputFile Ljava/io/File V in class Landroid/media/MediaRecorder_第1张图片

解决过程

如图错误的原因就是在使用MediaRecordersetOutputFile(file)传入一个File文件时报错,
但是仔细看了一下seOutputFIile有三个重载方法,如下图
No virtual method setOutputFile Ljava/io/File V in class Landroid/media/MediaRecorder_第2张图片这就郁闷了,传入File文件对象就报错,系统api有问题吗,然后就是将参数改成图中所示,传入文件的绝对路径,String类型试试,发现没问,解决了,事后查了查原因,在SDK 26之前setOutputFile()方法中参数没有File重载方法,如下图
No virtual method setOutputFile Ljava/io/File V in class Landroid/media/MediaRecorder_第3张图片即在API 版本小于26时,只有以上两个重载方法,那么如果想要使用此方法传入file文件则需加上校验:即可解决

    //设置输出文件
            if(Build.VERSION.SDK_INT < 26){
                //若api低于26,调用setOutputFile(String path)
                mediaRecorder.setOutputFile(file.getAbsolutePath());
            }else{
                //若API高于26 使用setOutputFile(File path)
                mediaRecorder.setOutputFile(file);
            }

特此记录一下。

你可能感兴趣的:(开发遇到问题)