使用Xamarin Forms nuget Xam.Plugin.Media用相机拍照

时间:2017-06-06 12:49:30

标签: android ios xamarin uwp

我刚刚使用了NUGET并安装了Xam.Plugin.Media,以便我可以使用我的移动应用拍摄照片。

我根据xamarin组件网站中的示例代码在按钮的click事件中编写了以下代码:

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();

有人可以帮我这个吗? 提前致谢。 Sarin Gopalan

2 个答案:

答案 0 :(得分: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项目中,您需要打开“信息列表”的代码。将显示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项目,您需要右键单击该项目并选择“&#39;属性”。这将打开一个新窗口,在左侧,您需要选择Android Manifest&#39;然后确保&#39; CAMERA&#39;,&#39; READ_EXTERNAL_STORAGE&#39;和&#39; WRITE_EXTERNAL_STORAGE&#39;我相信这些是画廊和相机访问的主要因素。

答案 1 :(得分:0)

您是否尝试过像在github上的文档那样使用InitializeComponent?

td

https://github.com/jamesmontemagno/MediaPlugin