Seletor de mídia para fotos e vídeos
Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI). IMediaPicker Essa interface permite que um usuário escolha ou tire uma foto ou vídeo no dispositivo.
A implementação padrão da interface está disponível por meio da IMediaPicker
MediaPicker.Default propriedade. A interface e MediaPicker
a IMediaPicker
classe estão contidas no Microsoft.Maui.Media
namespace.
Introdução
Para acessar a funcionalidade do seletor de mídia, é necessária a seguinte configuração específica da plataforma.
A permissão CAMERA
é necessária e deve ser configurada no projeto do Android. Além disso:
Se o seu aplicativo tiver como alvo o Android 12 ou inferior, você deverá solicitar as
READ_EXTERNAL_STORAGE
permissões eWRITE_EXTERNAL_STORAGE
.Se seu aplicativo tiver como alvo o Android 13 ou superior e precisar de acesso a arquivos de mídia criados por outros aplicativos, você deverá solicitar uma ou mais das seguintes permissões de mídia granular em vez da
READ_EXTERNAL_STORAGE
permissão:READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Essas permissões podem ser adicionadas das seguintes maneiras:
Adicione as permissões baseadas em assembly:
Abra o arquivo Platforms/Android/MainApplication.cs e adicione os seguintes atributos de assembly após
using
as diretivas:// Needed for Picking photo/video [assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage, MaxSdkVersion = 32)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaAudio)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaImages)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaVideo)] // Needed for Taking photo/video [assembly: UsesPermission(Android.Manifest.Permission.Camera)] [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage, MaxSdkVersion = 32)] // Add these properties if you would like to filter out devices that do not have cameras, or set to false to make them optional [assembly: UsesFeature("android.hardware.camera", Required = true)] [assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]
- ou -
Atualize o manifesto do Android:
Abra o arquivo Platforms/Android/AndroidManifest.xml e adicione o
manifest
seguinte no nó:<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Required only if your app needs to access images or photos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- Required only if your app needs to access videos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Required only if your app needs to access audio files that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
- ou -
Atualize o manifesto do Android no editor de manifesto:
No Visual Studio, clique duas vezes no arquivo Platforms/Android/AndroidManifest.xml para abrir o editor de manifesto do Android. Em seguida, em Permissões necessárias, verifique as permissões listadas acima. Isso atualizará automaticamente o arquivo AndroidManifest.xml.
Se a versão do Android de destino do seu projeto estiver definida como Android 11 (R API 30) ou superior, você deverá atualizar o manifesto do Android com consultas que usam os requisitos de visibilidade do pacote do Android.
No arquivo Platforms/Android/AndroidManifest.xml adicione os seguintes queries/intent
nós no manifest
nó:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Usando o seletor de mídia
A IMediaPicker interface tem os seguintes métodos que retornam um FileResult, que pode ser usado para obter a localização do arquivo ou lê-lo.
PickPhotoAsync
Abre o navegador de mídia para selecionar uma foto.CapturePhotoAsync
Abre a câmera para tirar uma foto.PickVideoAsync
Abre o navegador de mídia para selecionar um vídeo.CaptureVideoAsync
Abre a câmera para gravar um vídeo.
Cada método opcionalmente usa um tipo de MediaPickerOptions parâmetro que permite que o Title seja definido em alguns sistemas operacionais, que é exibido ao usuário.
Importante
Todos os métodos devem ser chamados no thread da interface do usuário porque as verificações de permissão e as solicitações são tratadas automaticamente pelo .NET MAUI.
Tirar uma foto
Chame o método para abrir a câmera e permita que o CapturePhotoAsync usuário tire uma foto. Se o usuário tirar uma foto, o valor de retorno do método será um valor não nulo. O exemplo de código a seguir usa o seletor de mídia para tirar uma foto e salvá-la no diretório de cache:
public async void TakePhoto()
{
if (MediaPicker.Default.IsCaptureSupported)
{
FileResult photo = await MediaPicker.Default.CapturePhotoAsync();
if (photo != null)
{
// save the file into local storage
string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
using Stream sourceStream = await photo.OpenReadAsync();
using FileStream localFileStream = File.OpenWrite(localFilePath);
await sourceStream.CopyToAsync(localFileStream);
}
}
}
Dica
A FullPath propriedade nem sempre retorna o caminho físico para o arquivo. Para obter o arquivo, use o OpenReadAsync método.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários