Xamarin C#中MediaRecorder无法启动,疑似权限异常
Xamarin C#原生相机录制视频失败问题
我在Xamarin C#项目中尝试原生调用相机录制视频,已配置相关权限,但MediaRecorder.Start()始终无法执行成功。使用MediaPicker可完成视频录制,但无法在手机界面不支持的场景下设置视频质量。设备日志显示存在android.permission.SYSTEM_CAMERA权限失败问题。
代码示例
var outputFile = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), "myvideooutputfile.mp4"); MediaRecorder mediaRecorder = new MediaRecorder(); //correctCamera(); //if (camera != null) // mediaRecorder.SetCamera(camera); //mediaRecorder.SetAudioSource(AudioSource.Mic); mediaRecorder.SetVideoSource(VideoSource.Camera); mediaRecorder.SetOutputFormat(OutputFormat.Mpeg4); //mediaRecorder.SetVideoSize(1280, 720); mediaRecorder.SetVideoEncoder(VideoEncoder.H264); //mediaRecorder.SetAudioEncoder(AudioEncoder.AmrNb); if (System.IO.File.Exists(outputFile)) System.IO.File.Delete(outputFile); System.IO.File.Create(outputFile); //CamcorderProfile camProf = CamcorderProfile.Get(CamcorderQuality.Q720p); //mediaRecorder.SetProfile(camProf); mediaRecorder.SetOutputFile(outputFile); mediaRecorder.Prepare(); Thread.Sleep(1000); try { mediaRecorder.Start(); } catch (Exception ex) { }
AndroidManifest权限配置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.microphone" /> <uses-feature android:name="android.hardware.location" android:required="false" /> <uses-feature android:name="android.hardware.location.gps" android:required="false" /> <uses-feature android:name="android.hardware.location.network" android:required="false" />
异常堆栈信息
at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in <2e109281f9514c53b44688fd4549adb2>:0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <2e109281f9514c53b44688fd4549adb2>:0 at Android.Media.MediaRecorder.Start () [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-31/mcw/Android.Media.MediaRecorder.cs:2392 at RECOmobile.Views.RecoveryJobPage.Take_Video_Clicked (System.Object sender, System.EventArgs e) [0x0008f] in C:\Users\Paul\source\repos\RECO\RECOmobile\RECOmobile\Views\RecoveryJobPage.xaml.cs:330 --- End of managed Java.Lang.RuntimeException stack trace --- java.lang.RuntimeException: start failed. at android.media.MediaRecorder.start(Native Method) at crc64ee486da937c010f4.ButtonRenderer.n_onClick(Native Method) at crc64ee486da937c010f4.ButtonRenderer.onClick(ButtonRenderer.java:104) at android.view.View.performClick(View.java:7448) at android.view.View.performClickInternal(View.java:7425) at android.view.View.access$3600(View.java:810) at android.view.View$PerformClick.run(View.java:28305) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
设备日志关键信息
10-10 14:27:54.292 pixel_5_-_api_30 Warning 411 ServiceManager Permission failure: android.permission.SYSTEM_CAMERA from uid=1013 pid=437
内容的提问来源于stack exchange,提问作者TryingAgain
相关产品推荐
相关产品推荐

