C# 在Xamarin.Forms中访问摄像头
我需要使用Xamarin Forms PCL访问摄像头。 我找不到任何有效的样品 我试图安装并使用它的示例代码,但它有例外。例如,对于XLabs示例,我使用以下内容:C# 在Xamarin.Forms中访问摄像头,c#,camera,xamarin.forms,xlabs,C#,Camera,Xamarin.forms,Xlabs,我需要使用Xamarin Forms PCL访问摄像头。 我找不到任何有效的样品 我试图安装并使用它的示例代码,但它有例外。例如,对于XLabs示例,我使用以下内容: /// <summary> /// Takes the picture. /// </summary> /// <returns>Take Picture Task.</returns> internal async Task<MediaFile> TakePicture
/// <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;
}
//
///拍照。
///
///拍照任务。
内部异步任务TakePicture()
{
设置();
ImageSource=null;
return wait_mediaPicker.TakePhotoAsync(新的CamerameDistorageOptions{DefaultCamera=CameraDevice.Front,MaxPixelDimension=400})。继续(t=>
{
如果(t.IsFaulted)
{
Status=t.Exception.InnerException.ToString();
}
否则,如果(t.IsCanceled)
{
Status=“已取消”;
}
其他的
{
var mediaFile=t.Result;
ImageSource=ImageSource.FromStream(()=>mediaFile.Source);
返回媒体文件;
}
返回null;
}),;
}
///
///设置此实例。
///
私有无效设置()
{
如果(_mediaPicker!=null)
{
返回;
}
var device=Resolver.Resolve();
////RM:在windows phone上工作的黑客?
_mediaPicker=DependencyService.Get()??device.mediaPicker;
}
我在Resolver.Resolve()上遇到以下异常:
IResolver尚未设置。请通过调用Resolver.SetResolver(Resolver)进行设置。
如何使用此选项或其他选项与Xamarin.Forms拍照?谢谢你提前给我小费 您必须配置IoC以使其工作,并使用Resolver.SetResolver方法将IoC提供程序设置为解析器。请在此处阅读更多信息,您不能直接访问Xamarin.Forms中的本机功能。您必须使用依赖服务来访问本机功能,如访问Camrera、audio等
试试这个:以下是xLabs摄像头的示例代码:
在这里的论坛上找到它:添加Droid项目,类main活动此代码
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
....
}
protectedoverride void OnCreate(捆绑包)
{
base.OnCreate(bundle);
#区域解析器初始化
SimpleContainer容器=新的SimpleContainer();
容器寄存器(t=>AndroidDevice.CurrentDevice);
container.Register(t=>t.Resolve().Display);
container.Register(t=>t.Resolve().Network);
SetResolver(container.GetResolver());
#端区
....
}
在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
....
}
public override bool FinishedLaunching(UIApplication应用程序、NSDictionary选项)
{
#区域解析器初始化
SimpleContainer容器=新的SimpleContainer();
容器寄存器(t=>AppleDevice.CurrentDevice);
container.Register(t=>t.Resolve().Display);
container.Register(t=>t.Resolve().Network);
SetResolver(container.GetResolver());
#端区
....
}
我应该在哪里做?我应该在PCL上还是在每个依赖项目中创建此SimpleContainer?您需要在每个特定于平台的项目中创建此SimpleContainer。您可以在Android项目中发布配置解析器的示例代码吗?我无法工作XLABS有示例代码,请检查SetIoC方法,尤其是第103行。