今天在使用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);
}
特此記錄一下。