【问题标题】:Taking a photo with camera using Xamarin Forms nuget Xam.Plugin.Media使用 Xamarin Forms nuget Xam.Plugin.Media 使用相机拍照
【发布时间】:2017-11-07 11:57:51
【问题描述】:

我刚刚使用了 NUGET 并安装了 Xam.Plugin.Media,这样我就可以使用我的移动应用拍照了。

我按照xamarin组件网站的示例代码在按钮的点击事件中编写了如下代码:

private async void btnTake1_Clicked(object sender, EventArgs e)
        {
            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                await DisplayAlert("No Camera", ":( No camera avaialble.", "OK");
                return;
            }

            var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {

                Directory = "Sample",
                Name = "test.jpg"
            });

            if (file == null)
                return;

            await DisplayAlert("File Location", file.Path, "OK");

            imgPhoto1.Source = ImageSource.FromStream(() =>
            {
                var stream = file.GetStream();
                file.Dispose();
                return stream;
            });

        }

一切顺利,解决方案构建成功,我现在只运行 UWP。但是当我单击按钮时,它会在

中的某个位置中断
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

有人可以帮我解决这个问题吗? 提前致谢。 萨林·戈帕兰

【问题讨论】:

  • 您能否告诉我们您在哪个平台上遇到错误,是 iOS、android 还是 UWP...您可能只是错过了其中一个平台的权限请求。
  • @Digitalsa1nt 对不起,我忘了说......我在 UWP 上遇到了这个错误。
  • 我可以在以下 URL 中看到权限代码:components.xamarin.com/gettingstarted/MediaPlugin/true Put 我该如何执行?我需要在哪里添加这个代码sn-p。
  • 我在下面添加了一个答案,应该可以帮助您解决问题。

标签: android ios xamarin uwp


【解决方案1】:

根据您的评论,以下内容适用于 Xamarin.Forms 和 UWP

在您的表单项目中,无论您想在哪里显示图库选择器(我们通过单击按钮来完成),您都可以使用如下内容:

private async void ChooseExistingClicked(object sender, EventArgs e)
{
    bool hasPermission = false;

    try
    {
        await CrossMedia.Current.Initialize();
        hasPermission = CrossMedia.Current.IsPickPhotoSupported;
    }
    catch (Exception genEx)
    {
        var Error = genEx;
    }

    if (!hasPermission)
    {
        await DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
        return;
    }

    var file = await CrossMedia.Current.PickPhotoAsync();

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

您还需要正确设置权限。因此,在您的 UWP 项目中,您将看到一个名为“Package.appxmanifext”的文件,双击它,然后选择“功能”并确保勾选列表中的“图片库”。

就是这样,这应该是你需要做的。

编辑:根据以下要求,您需要设置本地平台访问照片库的权限。

在您的 iOS 项目中,您需要打开“Info.plist”文件的代码,该文件将显示一个 XML 表格。您需要添加:

<key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>This is used to upload an image of concern along with your report</string>
    <key>NSMicrophoneUsageDescription</key>
    <string></string>

标签之间的任何地方。

对于您的 Android 项目,您需要右键单击该项目并选择“属性”,这将打开一个新窗口,您需要在左侧选择“Android Manifest”,然后确保“CAMERA”、“READ_EXTERNAL_STORAGE”和'WRITE_EXTERNAL_STORAGE'。我相信这些是画廊和相机访问的主要途径。

【讨论】:

  • 谢谢!能否请您指导我如何设置权限,以防 android 和 IOS 也需要?
  • @SarinGopalan 我已经修改了我的答案以包括 iOS 和 Android 权限。如果它有资格回答您的问题,请随时将其标记为答案。 =)
【解决方案2】:

您是否尝试过像 github 上的文档那样初始化组件?

await CrossMedia.Current.Initialize();

https://github.com/jamesmontemagno/MediaPlugin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多