繁体   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