Xamarin.Forms 相机控制访问 DependencyService
Posted
技术标签:
【中文标题】Xamarin.Forms 相机控制访问 DependencyService【英文标题】:Xamarin.Forms Camera Control Access DependencyService 【发布时间】:2016-12-08 21:10:54 【问题描述】:我正在寻找适用于 Visual Studio 的工作示例 Xamarin.Forms
解决方案,该解决方案将展示如何使用 DependencyService
接口访问 android 和 ios 设备的相机控件。我正在调用通过可移植类库中的按钮单击事件拍照的能力。
我需要能够限制使用设备上的某些相机控件,同时允许将使用我正在开发的应用程序的用户访问其他相机控件,然后他们才能拍照并保存。
我尝试了多种解决方案,包括在Camera access with Xamarin.Forms 找到的解决方案,但没有奏效。
【问题讨论】:
您是如何尝试找到的解决方案的?你能展示一些你的项目的错误信息和一些关键代码吗? 【参考方案1】:Media plugin for Xamarin 是访问设备内置摄像头功能的一个很好的例子。
听起来您的要求略有不同。您需要对相机页面的 UI 进行更多控制。您可以考虑制作自己的自定义相机页面。 here 有一个很好的例子。它实现了一个相机预览页面,您可以在其中创建 UI 控件。这使用自定义渲染器。
// The control used in shared code
public class CameraPreview : View
public static readonly BindableProperty CameraProperty = BindableProperty.Create (
propertyName: "Camera",
returnType: typeof(CameraOptions),
declaringType: typeof(CameraPreview),
defaultValue: CameraOptions.Rear);
public CameraOptions Camera
get return (CameraOptions)GetValue (CameraProperty);
set SetValue (CameraProperty, value);
// Renderer for iOS, platform specific project
[assembly: ExportRenderer (typeof(CameraPreview),
typeof(CameraPreviewRenderer))]
namespace CustomRenderer.iOS
public class CameraPreviewRenderer : ViewRenderer<CameraPreview, UICameraPreview>
UICameraPreview uiCameraPreview;
protected override void OnElementChanged (ElementChangedEventArgs<CameraPreview> e)
base.OnElementChanged (e);
if (Control == null)
uiCameraPreview = new UICameraPreview (e.NewElement.Camera);
SetNativeControl (uiCameraPreview);
if (e.OldElement != null)
// Unsubscribe
uiCameraPreview.Tapped -= OnCameraPreviewTapped;
if (e.NewElement != null)
// Subscribe
uiCameraPreview.Tapped += OnCameraPreviewTapped;
void OnCameraPreviewTapped (object sender, EventArgs e)
if (uiCameraPreview.IsPreviewing)
uiCameraPreview.CaptureSession.StopRunning ();
uiCameraPreview.IsPreviewing = false;
else
uiCameraPreview.CaptureSession.StartRunning ();
uiCameraPreview.IsPreviewing = true;
...
查看以上其他平台的链接。还有另一个制作自定义相机页面并在Moments sample 中捕获图像的示例。您可以在每个渲染器中看到一个按钮用于处理捕获图像。这使您可以更好地控制用户可以/不能做什么。
如果您在相机中包含更多关于您需要限制什么的具体信息,我也许可以用更多细节进行编辑。
【讨论】:
嗨,约翰!感谢你的回复!我决定使用在Full Camera Page 找到的自定义页面。我仍然需要在 android 项目中添加滑块类型控件以使相机缩放、将纵横比设置为 4:3 并使相机仅在横向模式下拍照。以上是关于Xamarin.Forms 相机控制访问 DependencyService的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms Java.Lang.RuntimeException:无法连接到相机服务
如何使用 Xamarin.Forms.DependencyService 注入具有构造函数注入的 ViewModel