コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }