使用MvvmCross在Xamarin Android中拍照

时间:2017-02-13 17:53:49

标签: c# xamarin mvvm xamarin.android mvvmcross

我正在开发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#

2 个答案:

答案 0 :(得分:1)

替代解决方案,您可以使用nuget中可用的媒体插件

https://www.nuget.org/packages/Xam.Plugin.Media/

您可以使用依赖服务从android项目调用takePictureAsync方法。使用此库,您可以指定用于存储图像的文件名和文件夹路径。该库还可以使用takeVideoAsync方法拍摄视频。

答案 1 :(得分:0)

我相信您需要将MVVMCross.Pugin.PictureChooser软件包添加到您的Core 平台特定项目中。