2017-02-13 88 views
0

我正在開發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: Exception has been thrown by the target of an invocation.

UPDATE

呼叫堆棧我有:

0x0 in Android.Content.Intent..ctor at /Users/builder/data/lanes/3511/501e63ce/source/monodroid/src/Mono.Android/platforms/android-24/src/generated/Android.Content.Intent.cs:1275,6 C# 0x12 in MvvmCross.Plugins.PictureChooser.Droid.MvxPictureChooserTask.TakePicture C#
0x3A in App.Services.PhotoService.PhotoService.GetPhoto at C:\app\App.Services\PhotoService\PhotoService.cs:38,4 C#
0x7 in App.ViewModels.ViewModels.MainViewModel.TakePhoto at C:\app\App.ViewModels\ViewModels\MainViewModel.cs:49,4 C#

+0

您是否有更多信息?如堆棧跟蹤。可能是內部異常? – Cheesebaron

+0

@Cheesebaron問題已更新 – Quiet

+0

這看起來不像整個堆棧跟蹤。 – Cheesebaron

回答

1

替代解決方案,您可以使用Media插件中的NuGet

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

你可以使用相關的服務來調用Android項目的takePictureAsync方法可用的。使用此庫,您可以指定文件名和文件夾路徑來存儲圖像。該庫也可以使用takeVideoAsync方法拍攝視頻。

+0

是的,它工作得很好。謝謝! – Quiet

0

我相信你需要的MVVMCross.Pugin.PictureChooser包添加到您的核心平臺的具體項目。

+0

我只有android項目。我將此插件添加到Android(核心)和我的Android類庫中,PhotoService – Quiet