2017-06-06 76 views
0

我刚刚使用NUGET并安装了Xam.Plugin.Media,以便我可以使用我的移动应用拍摄照片。使用Xamarin形式使用相机拍摄照片形式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(); 

有人可以帮助我吗? 在此先感谢。 沙林Gopalan

+0

您能否告诉我们哪个平台出现错误,无论是iOS,Android还是UWP ......这很可能是您错过了其中之一的权限请求。 – Digitalsa1nt

+0

@ Digitalsa1nt对不起,我忘了说......我在UWP上收到这个错误。 –

+0

我可以在下面的URL中看到权限的代码:https://components.xamarin.com/gettingstarted/MediaPlugin/true把我怎么强制执行?我需要在哪里添加这段代码片段。 –

回答

1

根据您的评论下面适用于Xamarin.Forms和UWP

在表单的项目,无论它是要dispaly画廊选择器(我们是从做按钮点击)您可能会使用类似于下面的内容:

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'的文件,双击这个文件,并选择'Capabilities'并确保列表中的'Picture Library'被勾选。

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

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

在你的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'。我相信这些对于图库和相机访问都是主要的。

+0

谢谢!你能指导我如何设置权限以防万一安卓和IOS需要吗? –

+0

@SarinGopalan我已经修改了我的答案,包括iOS和Android权限。如果它符合回答您的问题的资格,请随时选中它作为答案。 =) – Digitalsa1nt