private Task <PlatformDocument> StartActivity(Intent requestIntent)
        {
            var taskCompletionSource = new TaskCompletionSource <PlatformDocument>();

            Platform.StartActivityForResult(requestIntent, (result, responseIntent) =>
            {
                try
                {
                    if (result != Android.App.Result.Canceled)
                    {
                        var url = responseIntent.Data;
                        if (url != null)
                        {
                            var name            = "";
                            var contentResolver = Platform.MainActivity.ContentResolver;
                            using (var cursor = contentResolver.Query(url, new string[] { OpenableColumns.DisplayName }, null, null, null))
                            {
                                if (cursor?.MoveToFirst() ?? false)
                                {
                                    var columnIndex = cursor.GetColumnIndex(OpenableColumns.DisplayName);
                                    name            = cursor.IsNull(columnIndex) ? "" : cursor.GetString(columnIndex);
                                }
                            }
                            if (string.IsNullOrEmpty(name))
                            {
                                name = url.LastPathSegment;
                            }
                            var path = Path.GetTempFileName();
                            using (var dataStream = Platform.MainActivity.ContentResolver.OpenInputStream(url))
                                using (var fileStream = File.OpenWrite(path))
                                {
                                    dataStream.CopyTo(fileStream);
                                }
                            taskCompletionSource.SetResult(new PlatformDocument(
                                                               name: name,
                                                               path: path
                                                               ));
                            return;
                        }
                    }
                    taskCompletionSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskCompletionSource.SetException(e);
                }
            });
            return(taskCompletionSource.Task);
        }
Ejemplo n.º 2
0
        private Task <PlatformDocument> StartActivity(Intent requestIntent)
        {
            var taskCompletionSource = new TaskCompletionSource <PlatformDocument>();

            Platform.StartActivityForResult(requestIntent, (result, responseIntent) =>
            {
                try
                {
                    if (result != Android.App.Result.Canceled)
                    {
                        var url = responseIntent.Data;
                        if (url != null)
                        {
                            var name            = string.Empty;
                            var contentResolver = Platform.MainActivity.ContentResolver;
                            using (var cursor = contentResolver?.Query(
                                       url,
                                       new[] { OpenableColumns.DisplayName }, null, null, null))
                            {
                                if (cursor?.MoveToFirst() ?? false)
                                {
                                    var columnIndex = cursor.GetColumnIndex(OpenableColumns.DisplayName);
                                    name            = cursor.IsNull(columnIndex) ? string.Empty : cursor.GetString(columnIndex);
                                }
                            }
                            if (string.IsNullOrEmpty(name))
                            {
                                name = url.LastPathSegment;
                            }
                            var path = Path.GetTempFileName();
                            using (var dataStream = Platform.MainActivity.ContentResolver?.OpenInputStream(url))
                                using (var fileStream = File.OpenWrite(path))
                                {
                                    dataStream?.CopyTo(fileStream);
                                }

                            var fileName = Path.GetFileNameWithoutExtension(path);
                            var ext      = Path.GetExtension(path);

                            var fullPath = ReminderXamarin.Services.MediaPicker.FileHelper.GetOutputPath(
                                MediaFileType.Image,
                                TemporalDirectoryName,
                                $"{fileName}{ext}");

                            var fullImage = ImageHelpers.GetRotatedImage(path, 1);
                            File.WriteAllBytes(fullPath, fullImage);

                            taskCompletionSource.SetResult(new PlatformDocument(
                                                               name: name,
                                                               path: fullPath
                                                               ));
                            return;
                        }
                    }
                    taskCompletionSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskCompletionSource.SetException(e);
                }
            });
            return(taskCompletionSource.Task);
        }