【问题标题】:Compulsary requirement to take and store users photo using Xam.Plugin.Media强制要求使用 Xam.Plugin.Media 拍摄和存储用户照片
【发布时间】:2017-11-07 16:06:24
【问题描述】:

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

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

当前,当用户取消摄像头时,我的应用属于MainApplication 文件的onActivityResumed 方法

附上我的代码照片,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;
        }

【问题讨论】:

  • 请勿将代码作为图片发布。花点时间将您的代码粘贴并格式化为文本。
  • Jason 修复了我的帖子

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


【解决方案1】:

除了现在强迫用户做任何事情通常是一个用户体验问题之外,这个问题仍然有一些优点。

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

    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;
    }

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

【讨论】:

  • 我的应用程序在 OnActivityResumed 上仍然失败 .... 未处理的异常 public void OnActivityResumed(Activity activity) { CrossCurrentActivity.Current.Activity = activity; }
  • 那与你的拍照方式无关。这与您在“onActivityResumed”方法中所做的任何事情有关。您能否发布该方法或完整的错误(堆栈跟踪),以便我们更好地帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多