首页 > 系统相关 >【MAUI Blazor踩坑日记】2.关于Windows上的相机问题

【MAUI Blazor踩坑日记】2.关于Windows上的相机问题

时间:2023-04-23 19:56:44浏览次数:57  
标签:set Windows var launcherOptions new MAUI using Blazor

前言

MAUI中Windows上,调用MediaPicker.Default.CapturePhotoAsync()并不能启动相机拍照。关于这个问题可以查看 https://github.com/dotnet/maui/issues/7660https://github.com/dotnet/maui/pull/13220
好消息是已经修复了,坏消息是.net8修复了,而且还没发布.
所以目前怎么办, https://github.com/dotnet/maui/issues/7660 中已经给出了临时的解决方案。

正文

  1. 把下面代码复制到 Platforms/Windows 文件夹下
using Windows.Foundation.Collections;
using Windows.Media.Capture;
using Windows.Storage;
using Windows.System;
using WinRT.Interop;

public static class WindowsMediaPicker
{
    public static Task<FileResult?> CapturePhotoAsync()
        => CaptureAsync(false);

    public static Task<FileResult?> CaptureVideoAsync()
        => CaptureAsync(true);

    private static async Task<FileResult?> CaptureAsync(bool isVideo)
    {
        var captureUi = new CustomCameraCaptureUI();

        StorageFile? file = await captureUi.CaptureFileAsync(isVideo ? CameraCaptureUIMode.Video : CameraCaptureUIMode.Photo);

        if (file != null)
        {
            return new FileResult(file.Path, file.ContentType);
        }

        return null;
    }

    private class CustomCameraCaptureUI
    {
        private readonly LauncherOptions _launcherOptions;

        public CustomCameraCaptureUI()
        {
            var window = WindowStateManager.Default.GetActiveWindow();
            var handle = WindowNative.GetWindowHandle(window);

            _launcherOptions = new LauncherOptions();
            InitializeWithWindow.Initialize(_launcherOptions, handle);

            _launcherOptions.TreatAsUntrusted = false;
            _launcherOptions.DisplayApplicationPicker = false;
            _launcherOptions.TargetApplicationPackageFamilyName = "Microsoft.WindowsCamera_8wekyb3d8bbwe";
        }

        public async Task<StorageFile?> CaptureFileAsync(CameraCaptureUIMode mode)
        {
            var extension = mode == CameraCaptureUIMode.Photo ? ".jpg" : ".mp4";

            var currentAppData = ApplicationData.Current;
            var tempLocation = currentAppData.LocalCacheFolder;
            var tempFileName = $"capture{extension}";
            var tempFile = await tempLocation.CreateFileAsync(tempFileName, CreationCollisionOption.GenerateUniqueName);
            var token = Windows.ApplicationModel.DataTransfer.SharedStorageAccessManager.AddFile(tempFile);

            var set = new ValueSet();
            if (mode == CameraCaptureUIMode.Photo)
            {
                set.Add("MediaType", "photo");
                set.Add("PhotoFileToken", token);
            }
            else
            {
                set.Add("MediaType", "video");
                set.Add("VideoFileToken", token);
            }

            var uri = new Uri("microsoft.windows.camera.picker:");
            var result = await Windows.System.Launcher.LaunchUriForResultsAsync(uri, _launcherOptions, set);
            if (result.Status == LaunchUriStatus.Success && result.Result != null)
            {
                return tempFile;
            }

            return null;
        }
    }
}
  1. 如何使用
#if WINDOWS
            FileResult? photo = await WindowsMediaPicker.CapturePhotoAsync();
#else
            FileResult photo = await MediaPicker.Default.CapturePhotoAsync();
#endif

标签:set,Windows,var,launcherOptions,new,MAUI,using,Blazor
From: https://www.cnblogs.com/Yu-Core/p/17347547.html

相关文章

  • windows11安装adb步骤
    1.在官网上下载adb工具下载网址:https://adbdownload.com/ 2.下载的一个安装包,解压到你想放置的文件夹目录,如下图所示(需记住安装包的位置)3,右击电脑-》属性-》高级系统设置-》环境变量-》系统变量,找到path;4.双击path后,点击新建,把刚才的文件夹地址黏贴上面 5.验证环境是否......
  • Linux作为rsync的服务端,Windows作为rsync的客户端
    服务端:centos7     172.16.106.199客户端:Windows10  172.16.106.143 服务端配置:创建服务器要同步数据的目录/tmp/rsyncmkdir/tmp/rsync设置权限为700chmod700 /tmp/rsync/ 编辑配置文件/etc/rsyncd.conf (修改该文件 除了修改监听端口跟ip需要重启,修......
  • windows10移动U盘安装介质
    一、问题引入一般重装系统都是通过PE系统工具,但是大部分PE系统工具会夹带广告和垃圾软件。这时需要一个官方引导安装Windows10的介质,本文简单介绍官方安装介质的使用。二、解决过程......
  • 【MAUI Blazor踩坑日记】1.关于图标的处理
    【MAUIBlazor踩坑日记】1.关于图标的处理前言本系列文章,默认你已经踏上了MAUIBlazor的贼船,并且对MAUIBlazor有了一些了解,知道MAUI是什么,知道Blazor是什么。不会教你怎么写MAUIBlazor的项目,只是提出一些注意点,避免踩坑。正文先看官方资料https://learn.microsoft.com/z......
  • Cmd输入python会打开 Windows 应用商店 解决方法
    当我在CMD中输入Python时,它会打开Windows应用商店让我下载Python3.7。这个问题今天无缘无故地开始了。我没有更改或下载有关Python的任何内容,并且已经尝试重新安装Python,并且Path环境变量是正确的。Answers使用Windows搜索栏查找“管理应用执行别名”。Pytho......
  • vue 3.0 windows node切换
    '"bash"'不是内部或外部命令,也不是可运行的程序或批处理文件。https://blog.csdn.net/cnds123321/article/details/121257762超级管理运行cmdC:\ProgramFiles\nodejs>gnvmlistUsage:gnvm[flags]gnvm[command]AvailableCommands:config......
  • Windows10安装Transmission,并使用Web远程访问教程
    安装Transmission从官方路径下载Transmission安装包 https://transmissionbt.com/download/在组件安装界面,需要把Daemon和Webinterface,同步安装上。下载配置transmission-web-control3.访问https://github.com/ronggang/transmission-web-control ,下载最新源码包......
  • windows11 nvm 切换nodejs版本失败
    在windows11,当切换分支命令nvmuse16.15.0显示成功,但用nvmls看的时候发现分支没有切换,可以直接用windows的命令来覆盖原来nodejs文件夹的快捷方式  把这个文件夹删掉,然后用命令重建mklink/dD:\Soft\nvm\nodejsD:\Soft\nvm\nvm\v16.15.0 这样就可以重新指......
  • Adobe Photoshop 2023(MAC+Windows) +AI插件auto Photoshop stable diffusion plugin
    Adobe图像处理软件Photoshop2023正式版(24.1.1)2023年01月版发布。AdobePhotoshop2023破解版(简称PS)是一款全球流行的专业图像处理软件及照片和设计软件。AdobePhotoshop中文破解版是AdobeCreativeCloud创意云桌面程序中心的图形设计软件热门产品,它是平面设计领域和数......
  • windows安装opensssh报错: no such file /home/.../.ssh 解决方案
    报错详细信息addknowhosts...nosuchfileordirectory:/home/\u82\u22/.ssh原因分析这是因为openssh不是直接读取的HOME环境变量,而是使用/home/{USERNAME}的形式去找用户根目录。但msys2没有创建该目录,因为msys2将HOME目录定义为/c/Users/{name}/。具体问题分析:Cr......