You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:05:56