private async void TakePhotoButton_Clicked(object sender, EventArgs e) { const string defaultFileName = "New Photo.jpg"; var media = App.PresentationFactory.CreateMedia(App.CurrentPermissions); var filePicker = App.PresentationFactory.CreateFilePicker(); var isCameraAvailable = await media.GetIsCameraAvailable(); if (!isCameraAvailable || !media.IsTakePhotoSupported) { await DisplayAlert("No Camera", ":( No camera available.", "OK"); return; } using (var mediaFile = await media.TakePhotoAsync(new StoreCameraMediaOptions { PhotoSize = PhotoSize.Medium, Directory = "Adapt Sample App", Name = defaultFileName })) { if (mediaFile == null) { return; } using (var readFileStream = mediaFile.GetStream()) { FileSelectionDictionary fileTypes = new FileSelectionDictionary { { "Jpeg Image", new List <string> { ".jpg" } } }; using (var fileData = await filePicker.PickAndOpenFileForWriting(fileTypes, defaultFileName)) { if (fileData == null) { return; } var readBuffer = new byte[readFileStream.Length]; await readFileStream.ReadAsync(readBuffer, 0, (int)readFileStream.Length); fileData.FileStream.Write(readBuffer, 0, readBuffer.Length); } } } }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously public async Task <FileData> PickAndOpenFileForWriting(FileSelectionDictionary fileTypes, string fileName) #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var filePath = Path.Combine(documents, fileName); var fileStream = File.Create(filePath); var retVal = new FileData { FileName = fileName, FileStream = fileStream }; return(retVal); }
public async Task <FileData> PickAndOpenFileForWriting(FileSelectionDictionary fileTypes, string fileName) { var directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads); var filePath = Path.Combine(directory, fileName); var retVal = new FileData { FileName = fileName }; if (File.Exists(filePath)) { File.Delete(filePath); } retVal.FileStream = File.Create(filePath); return(retVal); }
public async Task <FileData> PickAndOpenFileForWriting(FileSelectionDictionary fileTypes, string fileName) { if (fileTypes == null) { throw new ArgumentNullException(nameof(fileTypes)); } if (fileTypes.Count == 0) { throw new Exception("At least one file type must be specified"); } var picker = new FileSavePicker(); if (fileName != null) { picker.SuggestedFileName = fileName; } foreach (var key in fileTypes.Keys) { picker.FileTypeChoices.Add(key, fileTypes[key]); } var file = await picker.PickSaveFileAsync(); if (file == null) { return(null); } var fileStream = await file.OpenStreamForWriteAsync(); var retVal = new FileData { FileName = file.Name, FileStream = fileStream }; return(retVal); }