是否有人能够提供一个关于如何使用Xamarin.Forms 1.3.x访问相机的简短,自包含的示例?只需调用本机相机应用程序并检索生成的图片就会很棒 . 在Xamarin.Forms页面上显示实时视图真棒!
我已经尝试过使用Xamarin.Mobile和Xamarin.Forms.Labs,但我无法在这两个平台上使用任何解决方案(现在专注于Android和iOS) . 网上发现的大多数代码片段(包括stackoverflow)都是不完整的,例如没有显示IMediaPicker对象的实现或者锚定拍照方法的位置 .
4 回答
我终于为iOS和Android创建了最低限度的解决方案 .
共享项目
首先,让我们看一下共享代码 . 为了在共享
App
类和特定于平台的代码之间轻松交互,我们在public static App
中存储了静态Instance
:此外,我们将显示
Image
,稍后将填充内容 . 所以我们创建一个成员:在
App
构造函数中,我们存储Instance
并创建页面内容,这是一个简单的button
和前面提到的image
:按钮的单击处理程序调用事件
ShouldTakePicture
. 它是一个公共成员,特定于平台的代码部分稍后将分配给它 .最后,我们提供了一种显示捕获图像的公共方法:
Android项目
在Android上我们修改
MainActivity
. 首先,我们为捕获的图像文件定义路径:在
OnCreate
的末尾,我们可以使用创建的App
的静态Instance
并分配一个匿名事件处理程序,它将启动一个新的Intent
来捕获图像:最后但同样重要的是,我们的活动必须对生成的图像做出反应 . 它只是将其文件路径推送到共享
ShowImage
方法 .就是这样!只是不要忘记在“AndroidManifest.xml”中设置“Camera”和“WriteExternalStorage”权限!
iOS项目
对于iOS实现,我们创建了一个自定义渲染器 . 因此,我们添加一个新文件“CustomContentPageRenderer”并在using语句后面添加相应的程序集属性:
CustomContentPageRenderer
继承自PageRenderer
:我们覆盖
ViewDidAppear
方法并添加以下部分 .创建一个新的图像选择器控制器参考相机:
一旦
ShouldTakePicture
事件被引发,就会出现图像选择器控制器:拍摄照片后,将其保存到
MyDocuments
文件夹并调用共享ShowImage
方法:最后,我们需要处理取消图像处理过程:
试试James Montemagno的MediaPlugin .
只需输入并运行
Install-Package Xam.Plugin.Media -Version 2.6.2
即可使用_2464215安装插件,或者转到Manage NuGet Packages...并输入Xam.Plugin.Media
并安装插件 . (必须在所有项目中安装插件 - 包括客户端项目)将提示readme.txt并按照其中的说明进行操作 . 之后,add the following codes(根据需要)到您的共享项目 . 上述readme.txt文件中要遵循的说明如下 .
适用于Android项目
在您的BaseActivity或MainActivity(对于Xamarin.Forms)中添加以下代码:
您还必须添加一些其他配置文件以遵守新的严格模式:
YOUR_APP_PACKAGE_NAME必须设置为您的应用包名称!
file_paths.xml
的新XML文件添加以下代码:
YOUR_APP_PACKAGE_NAME必须设置为您的应用包名称!
适用于iOS项目
您的应用需要在Info.plist中包含
NSCameraUsageDescription
和NSPhotoLibraryUsageDescription
的密钥才能访问设备的相机和照片/视频库 . 如果您正在使用库的视频功能,则还必须添加NSMicrophoneUsageDescription
. 当提示用户提供访问这些设备功能的权限时,将为用户显示为每个密钥提供的字符串 .如:
对于共享项目
要简单地打开相机,保存照片并显示带有文件路径的警报,请在共享项目中输入以下内容 .
这就是我需要在我的应用程序中运行异步摄像头捕获:
在iOS中:
如果您需要授权例程,请确保您也在
info.plist
中填写相机使用,这里是获得授权的功能:在Android中:
以下是如何在Xamarin Forms跨Xamarin iOS上完成的 .
这是一个很好的基础,但它需要首先渲染一个Page,你可以在其中为它指定UIApplication,以便为Camera / Photo Picker控制器提供UIView .
https://stackoverflow.com/a/28299259/1941942
便携式项目
iOS项目