使用Xam.Plugin.Media获取和存储用户照片的强制要求

时间:2017-06-06 14:57:39

标签: c# image visual-studio xamarin.forms photo

我有一个PCL类型的应用程序,我正在使用Xam.Plugin.Media插件。我需要它来确保用户在继续之前从相机提交照片。

为此,我通过按钮点击事件显示相机页面,我想确保如果用户取消此操作,应用程序再次启动相机,这将重复直到存储照片。

当用户取消相机时,我的应用程序属于onActivityResumed文件的MainApplication方法

附上我的代码照片,My code

 private async void TakePicture()
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                await App.Current.MainPage.DisplayAlert("No Camera", ":( No camera available.", "Aceptar");
            }



            file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg",
                PhotoSize = PhotoSize.Small,
            });

            //IsRunning = true;


            if (file != null)
            {
                ImageSource = ImageSource.FromStream(() =>
                {
                    var stream = file.GetStream();
                    return stream;
                });
            }

            IsRunning = false;
        }

1 个答案:

答案 0 :(得分:-1)

除了现在强迫用户使用任何东西通常是一个UX问题之外,这个问题仍有一些优点。

这是我会考虑的方法,它涉及递归。

    private async void TakePicture()
    {
        await CrossMedia.Current.Initialize();

        if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
        {
            await App.Current.MainPage.DisplayAlert("No Camera", ":( No camera available.", "Aceptar");
        }

        file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
        {
            Directory = "Sample",
            Name = "test.jpg",
            PhotoSize = PhotoSize.Small,
        });

        //IsRunning = true;

        if (file != null)
        {
            ImageSource = ImageSource.FromStream(() =>
            {
                var stream = file.GetStream();
                return stream;
            });
        }
        else
        {
            // Recursion - I believe that this would continue until the file is not null, then it would carry on.
            TakePicture();
        }

        IsRunning = false;
    }

我不能说我经常使用递归,但我认为它可能会在这里使用。