我正在使用MediaRecorder类库开发用于录制语音通话的应用程序。我正在使用Moto G mobile(API Level 21)进行USB调试。打完电话后,我开始用下面的代码录音。它以异常结束并在recorder.Start()
处中断。它创建一个文件,但它不包含任何音频,它是零字节的虚拟文件。
public MediaRecorder recorder = new MediaRecorder();
开始通话记录:
recorder.Reset();
recorder.SetAudioSource(AudioSource.VoiceCall);
recorder.SetOutputFormat(OutputFormat.ThreeGpp);
recorder.SetAudioEncoder(AudioEncoder.Aac);
recorder.SetOutputFile("/sdcard/Download" + "/123.amr");
recorder.Prepare();
recorder.Start(); // Exception Hits
结束通话记录
recorder.Stop();
recorder.Release();
权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
异常
{Java.Lang.RuntimeException: Exception of type 'Java.Lang.RuntimeException' was thrown.
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000b] in <filename unknown>:0
at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod) [0x00062] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:554
at Android.Media.MediaRecorder.Start () [0x00043] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/platforms/android-21/src/generated/Android.Media.MediaRecorder.cs:1475
at CallRecorderAndroidPOC.MainActivity+<>c__DisplayClass4.<OnCreate>b__0 (System.Object param0, System.EventArgs param1) [0x000a1] in d:\Android Application Development\POC's\CallRecorderAndroidPOC\CallRecorderAndroidPOC\MainActivity.cs:65
--- End of managed exception stack trace ---
java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29)
at android.view.View.performClick(View.java:4761)
at android.view.View$PerformClick.run(View.java:19767)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
}
我将文件扩展名更改为.aac,但也抛出相同的异常。
可以,有人帮我解决这个问题吗?
答案 0 :(得分:1)
您将输出格式为:recorder.SetOutputFormat(OutputFormat。 ThreeGpp );。
但是,
设置输出路径时,它的位置为:recorder.SetOutputFile(&#34; / sdcard / Download&#34; +&#34; / 123。 amr &#34;) ;
将其修改为:recorder.SetOutputFile(&#34; / sdcard / Download / 123。 3gpp &#34;);
答案 1 :(得分:0)
有点晚了,我知道,但我遇到了同样的问题并解决了它,所以我想为遇到这个问题的其他人发布答案。
问题可能在于您尝试从非活动的音频源录制。如果那是问题所在,那么当你打电话时,该代码应该可以正常工作。
这种情况可能发生的另一个原因是,您正试图通过不支持此功能的手机进行语音录音,例如谷歌手机。