Esempio n. 1
0
        static Task <FileInfo[]> TakeMedia(string type, string action, bool enableMultipleSelection, Device.MediaCaptureSettings options)
        {
            var id = NextRequestId++;

            var completionSource = new TaskCompletionSource <FileInfo[]>(id);

            UIRuntime.CurrentActivity.StartActivity(CreateIntent(id, type, action, enableMultipleSelection, options));

            void OnMediaPicked(MediaPickedEventArgs e)
            {
                GC.Collect();
                PickerActivity.Picked.RemoveHandler(OnMediaPicked);

                if (e.RequestId != id)
                {
                    return;
                }

                if (e.Media.Any(x => !x.Exists()))
                {
                    completionSource.TrySetResult(null);
                }
                else if (e.Error != null)
                {
                    completionSource.SetException(e.Error);
                }
                else
                {
                    completionSource.TrySetResult(e.Media);
                }
            }

            PickerActivity.Picked.Handle(OnMediaPicked);
            GC.Collect();
            return(completionSource.Task);
        }
Esempio n. 2
0
        static Intent CreateIntent(int id, string type, string action, bool enableMultipleSelection, Device.MediaCaptureSettings settings)
        {
            var result = new Intent(UIRuntime.CurrentActivity, typeof(PickerActivity))
                         .PutExtra("id", id)
                         .PutExtra("type", type)
                         .PutExtra("action", action)
                         .PutExtra(Intent.ExtraAllowMultiple, enableMultipleSelection)
                         .PutExtra("purge-camera-roll", settings.PurgeCameraRoll)
                         .SetFlags(ActivityFlags.NewTask);

            if (settings.Camera == CameraOption.Front)
            {
                result.PutExtra("android.intent.extras.CAMERA_FACING", 1);
            }

            if (action == MediaStore.ActionVideoCapture)
            {
                if (settings.VideoMaxDuration.HasValue)
                {
                    result.PutExtra(MediaStore.ExtraDurationLimit, (int)settings.VideoMaxDuration.Value.TotalSeconds);
                }

                if (settings.VideoQuality == VideoQuality.Low)
                {
                    result.PutExtra(MediaStore.ExtraVideoQuality, 0);
                }
                else
                {
                    result.PutExtra(MediaStore.ExtraVideoQuality, 1);
                }
            }

            return(result);
        }