在 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>():
IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver)
上得到以下异常
如何使用这个或其他替代方法与 Xamarin.Forms 拍照?感谢提前提示!
您必须配置 IoC 才能使其正常工作,并使用 Resolver.SetResolver 方法将 IoC 提供程序设置为解析器。在这里阅读更多,https://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC
您无法直接访问 Xamarin.Forms 中的本机功能。您必须使用 Dependency Service 才能访问本机功能,例如访问 Camrera、音频等
试试这个:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/
这是 xLabs 相机的示例代码:
https://www.dropbox.com/s/9paojg1q43ahnqk/XPA_PickMedia_XLabs_XFP.zip?dl=0
从这里的论坛找到它:https://forums.xamarin.com/discussion/35636/a-sample-project-using-camera-control-mediapicker-of-xlabs
在你的Droid Project中添加classMainActivity这段代码
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 class 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 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>():
IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver)
如何使用这个或其他替代方法与 Xamarin.Forms 拍照?感谢提前提示!
您必须配置 IoC 才能使其正常工作,并使用 Resolver.SetResolver 方法将 IoC 提供程序设置为解析器。在这里阅读更多,https://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC
您无法直接访问 Xamarin.Forms 中的本机功能。您必须使用 Dependency Service 才能访问本机功能,例如访问 Camrera、音频等
试试这个:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/
这是 xLabs 相机的示例代码:
https://www.dropbox.com/s/9paojg1q43ahnqk/XPA_PickMedia_XLabs_XFP.zip?dl=0
从这里的论坛找到它:https://forums.xamarin.com/discussion/35636/a-sample-project-using-camera-control-mediapicker-of-xlabs
在你的Droid Project中添加classMainActivity这段代码
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 class 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
....
}