public Task <MediaResult> TakePhotoAsync(CameraOption option) { if (string.IsNullOrWhiteSpace(option.FilePath)) { option.FilePath = System.IO.Path.Combine(GetPublicDirectoryPath(), GenerateUniqueFileName("jpeg")); } var task = new TaskCompletionSource <MediaResult>(); try { var picker = new ImagePickerController(); picker.TakePhotoAsync(GetController(), (nsDict) => { if (nsDict == null) { task.SetResult(new MediaResult(false) { Message = "Cancelled." }); return; } var photo = nsDict.ValueForKey(new NSString("UIImagePickerControllerOriginalImage")) as UIImage; if (option.MaxHeight > 0 && option.MaxWidth > 0) { photo.Scale(new CoreGraphics.CGSize(option.MaxWidth, option.MaxHeight)); } try { NSData imgData = photo.AsJPEG(); NSError err = null; if (imgData.Save(option.FilePath, false, out err)) { task.SetResult(new MediaResult(true) { FilePath = option.FilePath }); } else { task.SetResult(null); } } catch (Exception ex) { task.SetResult(new MediaResult(false) { Message = ex.Message }); } }); } catch (Exception ex) { task.SetResult(new MediaResult(false) { Message = ex.Message }); } return(task.Task); }
public Task <MediaResult> OpenMediaPickerAsync(MediaType fileType) { var task = new TaskCompletionSource <MediaResult>(); try { if (fileType == MediaType.Image) { var picker = new ImagePickerController(); picker.OpenImagePickerAsync(GetController(), (nsdict) => { if (nsdict == null) { task.SetResult(new MediaResult(false) { Message = "Cancelled." }); return; } try { var photoUrl = nsdict.ValueForKey(new NSString("UIImagePickerControllerReferenceURL")) as NSUrl; var imageName = photoUrl.LastPathComponent; var dir = NSSearchPath.GetDirectories(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User, true).FirstOrDefault(); var picUrl = new NSUrl(dir, true); var localPath = picUrl.Append(imageName, false); var localPath1 = picUrl.Append(imageName, true); //task.SetResult(new MediaResult(true) { FilePath = localPath.ToString()}); var photo = nsdict.ValueForKey(new NSString("UIImagePickerControllerOriginalImage")) as UIImage; if (photo != null) { string fileName = System.IO.Path.Combine(GetPublicDirectoryPath(), imageName); NSError err = null; if (photo.AsJPEG().Save(fileName, false, out err)) { task.SetResult(new MediaResult(true) { FilePath = fileName }); } else { task.SetResult(null); } } else { task.SetResult(null); } } catch (Exception ex) { task.SetResult(new MediaResult(false) { FilePath = ex.Message }); } }); } else if (fileType == MediaType.Video) { var picker = new ImagePickerController(); picker.OpenVideoPickerAsync(GetController(), (nsdict) => { if (nsdict == null) { task.SetResult(new MediaResult(false) { Message = "Cancelled." }); return; } try { var mediaUrl = nsdict.ValueForKey(new NSString("UIImagePickerControllerMediaURL")) as NSUrl; task.SetResult(new MediaResult(true) { FilePath = mediaUrl.ToString() }); } catch (Exception ex) { task.SetResult(new MediaResult(false) { FilePath = ex.Message }); } }); } else if (fileType == MediaType.Documents) { var picker = new ImagePickerController(); picker.OpenDoc(GetController(), (obj) => { if (obj == null) { task.SetResult(new MediaResult(false) { Message = "Cancelled." }); return; } try { var aa = obj.AbsoluteUrl; var isExist = System.IO.File.Exists(aa.AbsoluteString); task.SetResult(new MediaResult(true) { FilePath = aa.Path }); } catch (Exception ex) { task.SetResult(new MediaResult(false) { FilePath = ex.Message }); } }); } else { var picker = new AudioPickerController(); picker.OpenAudioPickerAsync(GetController(), (nsurl) => { if (nsurl == null) { task.SetResult(new MediaResult(false) { Message = "Cancelled." }); return; } task.SetResult(new MediaResult(true) { FilePath = nsurl.ToString() }); }); } } catch (Exception ex) { task.SetResult(new MediaResult(false) { Message = ex.Message }); } return(task.Task); }