我正在开发Xamarin Android项目,我想实现与MvvmCross拍照。
这是我的代码:
public class PhotoService:IPhotoService
{
private const int MaxPixelDimension = 1280;
private const int DefaultJpegQuality = 90;
private Stream imageStream;
public Stream ImageStream
{
get { return imageStream; }
set { imageStream = value; }
}
public void GetPhoto()
{
var task = Mvx.Resolve<IMvxPictureChooserTask>();
task.TakePicture(
MaxPixelDimension,
DefaultJpegQuality,
SavePicture, null);
}
private void SavePicture(Stream stream)
{
ImageStream = stream;
}
}
但在:
task.TakePicture(
MaxPixelDimension,
DefaultJpegQuality,
SavePicture,
null);
我有错误:
System.Reflection.TargetInvocationException:调用目标抛出了异常。
更新
在调用堆栈中我有:Android.Content.Intent..ctor中的0x0 /Users/builder/data/lanes/3511/501e63ce/source/monodroid/src/Mono.Android/platforms/android-24/src/generated/Android.Content .Intent.cs:1275,6 C# MvvmCross.Plugins.PictureChooser.Droid.MvxPictureChooserTask.TakePicture C#中的0x12 位于C:\ app \ App.Services \ PhotoService \ PhotoService.cs的App.Services.PhotoService.PhotoService.GetPhoto中的0x3A:38,4 C#
App.ViewModels.ViewModels.MainViewModel.TakePhoto中的0x7位于C:\ app \ App.ViewModels \ ViewModels \ MainViewModel.cs:49,4 C#
答案 0 :(得分:1)
替代解决方案,您可以使用nuget中可用的媒体插件
https://www.nuget.org/packages/Xam.Plugin.Media/
您可以使用依赖服务从android项目调用takePictureAsync
方法。使用此库,您可以指定用于存储图像的文件名和文件夹路径。该库还可以使用takeVideoAsync
方法拍摄视频。
答案 1 :(得分:0)
我相信您需要将MVVMCross.Pugin.PictureChooser软件包添加到您的Core 和平台特定项目中。