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); }
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); }