UWP C# 将设备信息保存到 ApplicationData

问题描述

我正在尝试在我的应用程序中保存 device information。 我设法将 as string 保存到 ApplicationData.Current.RoamingSettings,但无法保存为 deviceinformation,我需要在应用启动时使用它来枚举我的设备。

我不确定这样做的正确方法是什么。 有人可以建议吗? 谢谢。

    const string MicDeviceNameKey = "MicDeviceName";
    const string MicdeviceidKey = "Micdeviceid";
    IPropertySet settings = ApplicationData.Current.RoamingSettings.Values;

    public string MicDeviceName
    {
        get
        {
            object setting;
            if (settings.TryGetValue(MicDeviceNameKey,out setting))
                return (string)setting;
            return null;
        }
        set
        {
            settings[MicDeviceNameKey] = value;
        }
    }

    public Deviceinformation Micdeviceid
    {
        get
        {
            if (settings[MicdeviceidKey] != null)
                return (Deviceinformation)settings[MicdeviceidKey];
            return null;
        }
        set
        {
            settings[MicdeviceidKey] = value;
        }
    }

enter image description here

更新

我使用 AudioGraph 将麦克风输入路由到线路输出。 无论如何,我可以为Device informationCapture 设备加载已保存的Render 以初始化AudioGraphSettings

public async Task CreateMicRoute(Deviceinformation output,Deviceinformation input)
    {
        // ################################################################################################
        // Register the Output Source for the Playback
        var settings = new AudioGraphSettings(AudioRenderCategory.Media);
        settings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.LowestLatency;
        settings.PrimaryRenderDevice = output;

        var result = await AudioGraph.CreateAsync(settings);

        if (result.Status != AudioGraphCreationStatus.Success)
        {
            // Cannot create graph
            //rootPage.NotifyUser(String.Format("AudioGraph Creation Error because {0}",result.Status.ToString()),NotifyType.ErrorMessage);
            return;
        }

        //Create Audio Graph
        micAudioGraph = result.Graph;

        // ################################################################################################
        // Create a device input node
        var inProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Medium);
        var DeviceInputResult = await micAudioGraph.CreateDeviceInputNodeAsync(MediaCategory.Media,inProfile.Audio,input);
        if (DeviceInputResult.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device input node
            return;
        }

        // Set the Created Audio Input Node to Device Input Node
        deviceInputNode = DeviceInputResult.DeviceInputNode;

        // Create a device output node
        var DeviceOutputResult = await micAudioGraph.CreateDeviceOutputNodeAsync();
        if (DeviceOutputResult.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device output node
            return ;
        }
        // Selected Output device from Audio Graph is set to Device Output Node
        deviceOutputNode = DeviceOutputResult.DeviceOutputNode;

        // ################################################################################################           
        if (micAudioGraph == null)
            return;
    }

解决方法

请检查文档 here

对于 LocalSettingsRoamingSettings,每个设置的名称长度最多为 255 个字符。每个设置的大小最多为 8K 字节,每个复合设置的大小最多为 64K 字节。

应用设置的 Windows Runtime data types are supported。但是 DeviceInformation 不在支持列表中。对于您的场景,我们建议您保存一些关于 DeviceInformation 此类设备 ID 设备类型的键值。并获取带有设备 ID 的设备。

更新

DeviceInformation 包含 CreateFromIdAsync 方法,您可以将 DeviceInformation 的 id 存储到本地设置中,并使用以下代码检索 DeviceInformation

DeviceInformation.CreateFromIdAsync("Device ID");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...