尝试使用Xam.Plugin.Media打开相机时抛出异常

时间:2018-01-13 08:51:23

标签: c# xamarin xamarin.forms xamarin.android

当我尝试使用await CrossMedia.Current.TakePhotAsync()打开相机时,我得到以下异常。它不会在应用程序中打开任何相机。

  

商店InterpretedSystem.Runtime.CompilerServices.IAsyncStateMachineVT.<>7__wrap2

上的字段溢出

我的代码如下,

        public UserProfilePage()
        {
            InitializeComponent();

            CameraButton.Clicked += CameraButton_Clicked;
            BindingContext = new UserProfileViewModel(this.Navigation);
        }  

        private async void CameraButton_Clicked(object sender, EventArgs e)
        {
            if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported)
            {

                // Supply media options for saving our photo after it's taken.
                var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions
                {
                    Directory = "Receipts",
                    Name = $"{DateTime.UtcNow}.jpg"
                };

                // Take a photo of the business receipt.
                try
                {
                    var file = await CrossMedia.Current.TakePhotoAsync(mediaOptions);

                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                    throw;
                }
            }
        }

Xaml页面如下,

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Image x:Name="PhotoImage" />
        <Button x:Name="CameraButton" Text="Take Photo" Grid.Row="1" />
    </Grid>

如何打开相机并在xamarin中拍照。以下是混乱,

  

Xam.Plugin.Media = v3.1.2

     

Xamarin.Forms = v2.5.0.121934

     

VS2017

2 个答案:

答案 0 :(得分:1)

当您尝试在 Xamarin Live Player 中运行音频,相机类功能时,会发生此错误。

插入实际的物理设备进行调试或释放将解决问题。

答案 1 :(得分:0)

我认为原因可能在于照片的目标文件名:

Name = $"{DateTime.UtcNow}.jpg"

日期包含文件路径中无效且导致异常的字符。

您可以使用适合文件名的替代格式:

Name = $"{DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")}.jpg"