今天在使用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) 如下图:
解决过程
如图错误的原因就是在使用MediaRecorder
的setOutputFile(file)
传入一个File文件时报错,
但是仔细看了一下seOutputFIile
有三个重载方法,如下图
这就郁闷了,传入File文件对象就报错,系统api有问题吗,然后就是将参数改成图中所示,传入文件的绝对路径,String类型试试,发现没问,解决了,事后查了查原因,在SDK 26之前
setOutputFile()
方法中参数没有File重载方法,如下图
即在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);
}
特此记录一下。