Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
#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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }