2017-06-06 59 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

相關問題