diff --git a/samples/CommunityToolkit.Maui.Sample/Pages/Views/CameraView/CameraViewPage.xaml.cs b/samples/CommunityToolkit.Maui.Sample/Pages/Views/CameraView/CameraViewPage.xaml.cs index a4069818ce..e8ef1aeddd 100644 --- a/samples/CommunityToolkit.Maui.Sample/Pages/Views/CameraView/CameraViewPage.xaml.cs +++ b/samples/CommunityToolkit.Maui.Sample/Pages/Views/CameraView/CameraViewPage.xaml.cs @@ -37,8 +37,7 @@ protected override async void OnAppearing() var microphonePermissionsRequest = await Permissions.RequestAsync(); if (microphonePermissionsRequest is not PermissionStatus.Granted) { - await Shell.Current.CurrentPage.DisplayAlertAsync("Microphone permission is not granted.", "Please grant the permission to use this feature.", "OK"); - return; + await Shell.Current.CurrentPage.DisplayAlertAsync("Microphone permission is not granted.", "Audio recording will not be available without the Microphone permission, and captured video will be silent.", "OK"); } } catch (FileNotFoundException) when (OperatingSystem.IsWindows()) // Unpackaged Windows Apps do not generate the required file AppxManifest.xml diff --git a/samples/CommunityToolkit.Maui.Sample/Platforms/Windows/Package.appxmanifest b/samples/CommunityToolkit.Maui.Sample/Platforms/Windows/Package.appxmanifest index 2225753a55..48b2bd9b8b 100644 --- a/samples/CommunityToolkit.Maui.Sample/Platforms/Windows/Package.appxmanifest +++ b/samples/CommunityToolkit.Maui.Sample/Platforms/Windows/Package.appxmanifest @@ -58,6 +58,7 @@ + \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Camera/Extensions/CameraViewExtensions.windows.cs b/src/CommunityToolkit.Maui.Camera/Extensions/CameraViewExtensions.windows.cs index 8d525b70df..a888cf7b32 100644 --- a/src/CommunityToolkit.Maui.Camera/Extensions/CameraViewExtensions.windows.cs +++ b/src/CommunityToolkit.Maui.Camera/Extensions/CameraViewExtensions.windows.cs @@ -1,5 +1,6 @@ using CommunityToolkit.Maui.Core; using Windows.Devices.Enumeration; +using Windows.Media; using Windows.Media.Capture; namespace CommunityToolkit.Maui.Extensions; @@ -13,20 +14,40 @@ public static async Task UpdateAvailability(this ICameraView cameraView, Cancell cameraView.IsAvailable = videoCaptureDevices.Count > 0; } - public static Task InitializeCameraForCameraView(this MediaCapture mediaCapture, string deviceId, CancellationToken token) + public static async Task InitializeCameraForCameraView(this MediaCapture mediaCapture, string deviceId, CancellationToken token) { try { - return mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings + var settings = new MediaCaptureInitializationSettings { VideoDeviceId = deviceId, PhotoCaptureSource = PhotoCaptureSource.Auto - }).AsTask(token); + }; + + PermissionStatus microphonePermissionStatus = PermissionStatus.Unknown; + + // unpackaged apps always have the capability + var isMicrophoneCapable = + AppInfo.PackagingModel != AppPackagingModel.Packaged || + Permissions.IsCapabilityDeclared("microphone"); + + if (isMicrophoneCapable) + { + microphonePermissionStatus = await Permissions.CheckStatusAsync(); + } + + if (!isMicrophoneCapable || microphonePermissionStatus != PermissionStatus.Granted) + { + settings.StreamingCaptureMode = StreamingCaptureMode.Video; + settings.MediaCategory = MediaCategory.Media; + settings.AudioProcessing = AudioProcessing.Default; + } + + await mediaCapture.InitializeAsync(settings).AsTask(token); } catch (System.Runtime.InteropServices.COMException) { // Camera already initialized - return Task.CompletedTask; } } } \ No newline at end of file