簡體   English   中英

在Xamarin.Forms中訪問相機

[英]Access to Camera in Xamarin.Forms

我需要使用Xamarin Forms PCL訪問相機。 我找不到任何可行的樣本。

我嘗試安裝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>():上得到以下異常Resolver.Resolve<IDevice>(): IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver) IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver)

我如何使用這個或其他替代方法用Xamarin.Forms拍照? 感謝提前提示!

在您的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
    ....
}

在IOS類AppDelegate中這一個:

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
    ....
}

您無法直接訪問Xamarin.Forms中的本機功能。 您必須使用Dependency Service來訪問本機功能,如訪問Camrera,音頻等。

試試這個: http//developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/

您必須配置IoC才能使其正常工作,並使用Resolver.SetResolver方法將IoC提供程序設置為Resolver。 在這里閱讀更多內容, https://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM