2015-07-10 100 views
2

我需要使用Xamarin Forms PCL訪問相機。 我找不到任何有效的樣本。訪問Xamarin.Forms中的相機

我嘗試安裝XLab並使用其示例代碼,但它有例外。例如,與XLabs樣品我使用了以下內容:

/// <summary> 
/// Takes the picture. 
/// </summary> 
/// <returns>Take Picture Task.</returns> 
internal async Task<MediaFile> TakePicture() 
{ 
    Setup(); 

    ImageSource = null; 

    return await _mediaPicker.TakePhotoAsync(new CameraMediaStorageOptions { DefaultCamera = CameraDevice.Front, MaxPixelDimension = 400 }).ContinueWith(t => 
    { 
     if (t.IsFaulted) 
     { 
      Status = t.Exception.InnerException.ToString(); 
     } 
     else if (t.IsCanceled) 
     { 
      Status = "Canceled"; 
     } 
     else 
     { 
      var mediaFile = t.Result; 

      ImageSource = ImageSource.FromStream(() => mediaFile.Source); 

      return mediaFile; 
     } 

     return null; 
    }, _scheduler); 
} 

/// <summary> 
/// Setups this instance. 
/// </summary> 
private void Setup() 
{ 
    if (_mediaPicker != null) 
    { 
     return; 
    } 

    var device = Resolver.Resolve<IDevice>(); 

    ////RM: hack for working on windows phone? 
    _mediaPicker = DependencyService.Get<IMediaPicker>() ?? device.MediaPicker; 
} 

我得到Resolver.Resolve<IDevice>():IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver)

以下異常如何我用這個或其他替代進行拍照與Xamarin.Forms?感謝您提前提供任何提示!

回答

5

添加在你的Droid項目,類MainActivity這個代碼

protected override void OnCreate (Bundle bundle) 
{ 
    base.OnCreate (bundle); 
    #region Resolver Init 
    SimpleContainer container = new SimpleContainer(); 
    container.Register<IDevice>(t => AndroidDevice.CurrentDevice); 
    container.Register<IDisplay>(t => t.Resolve<IDevice>().Display); 
    container.Register<INetwork>(t => t.Resolve<IDevice>().Network); 

    Resolver.SetResolver(container.GetResolver()); 
    #endregion 
    .... 
} 

and in IOS class AppDelegate this one:

public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
{ 
    #region Resolver Init 
    SimpleContainer container = new SimpleContainer(); 
    container.Register<IDevice>(t => AppleDevice.CurrentDevice); 
    container.Register<IDisplay>(t => t.Resolve<IDevice>().Display); 
    container.Register<INetwork>(t => t.Resolve<IDevice>().Network); 

    Resolver.SetResolver(container.GetResolver()); 
    #endregion 
    .... 
} 
0

您必須配置IoC以使其工作,並使用Resolver.SetResolver方法將IoC提供程序設置爲Resolver。在這裏閱讀更多,https://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC

+0

我應該在哪裏做?我應該在PCL上還是在每個依賴項目中創建這個SimpleContainer? –

+0

您需要在每個特定平臺項目中都這樣做。 – Daniel

+0

你可以在Android項目中發佈配置解析器的示例代碼嗎?我無法使它工作 –