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) 如下圖:在這裏插入圖片描述

解決過程

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

特此記錄一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章