--- uid: Uno.Features.Capture --- # Capture > [!TIP] > This article covers Uno-specific information for the `Windows.Media.Capture` namespace. For a full description of the feature and its instructions, see [Windows.Media.Capture Namespace](https://learn.microsoft.com/uwp/api/windows.media.capture). The `Windows.Media.Capture` namespace provides classes for capturing photos, audio recordings, and videos. ## `CameraCaptureUI` `CameraCaptureUI` is currently only supported on Android, iOS, and WinUI. On other platforms, `CaptureFileAsync` will return `null`. > [!IMPORTANT] > `CaptureFileAsync` should only be called from the UI thread. Calling them from a background thread will throw an `InvalidOperationException`. ### Platform-specific #### Android If you are planning to use the `CameraCaptureUI`, your app must declare `android.permission.CAMERA` and `android.permission.WRITE_EXTERNAL_STORAGE` permissions, otherwise the functionality will not work as expected: ```csharp [assembly: UsesPermission("android.permission.CAMERA")] [assembly: UsesPermission("android.permission.WRITE_EXTERNAL_STORAGE")] ``` #### iOS On iOS, CameraCaptureUI uses the native `UIImagePickerController` to capture media. To request the necessary permissions, ensure that the `NSCameraUsageDescription` and `NSMicrophoneUsageDescription` keys are added to the `Info.plist` file. > [!NOTE] > The `NSMicrophoneUsageDescription` key is required only if you are capturing videos. If you are only capturing photos, you can omit this key. ```xml NSCameraUsageDescription We need access to the camera to take photos. NSMicrophoneUsageDescription We need access to the microphone to record videos. ``` > [!IMPORTANT] > iOS simulators do not have access to a camera. To test the camera functionality, you need to run the app on a physical device. When using a simulator, your app will open the Photo Library instead of the camera, but the functionality will work as expected once the app is deployed to a physical device. #### WinUI On WinUI, `CameraCaptureUI` provides a unified interface for capturing photos and videos, fully leveraging the platform's APIs. WinUI support is coming with v1.7+. ### Example ```csharp #if __ANDROID__ || __IOS__ || __WINDOWS__ using Windows.Media.Capture; #endif public async Task CapturePhotoAsync() { #if __ANDROID__ || __IOS__ || __WINDOWS__ var captureUI = new CameraCaptureUI(); captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; var file = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); if (file != null) { // Handle the captured file (e.g., save or display it) } else { // Handle the cancellation or error } #endif } ``` You can also check out our [sample](https://github.com/unoplatform/Uno.Samples/tree/master/UI/CameraCaptureUI) for more details.