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

MyhEhud發表於2019-09-09

今天在使用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) 如下圖:在這裡插入圖片描述

解決過程

如圖錯誤的原因就是在使用MediaRecordersetOutputFile(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);
            }

特此記錄一下。

相關文章