5

我已经尝试过使用 AudioRoutingManager 类......但我得到了未授权访问异常。这是我的代码

 AudioRoutingManager audioRouting = AudioRoutingManager.GetDefault();
    public AudioRoutingEndpoint ChangeAudioRoute()
    {

       var currentEndPoint= audioRouting.GetAudioEndpoint();
       switch (currentEndPoint)
       {
           case AudioRoutingEndpoint.Earpiece:
           case AudioRoutingEndpoint.Default:
               return AudioRoutingEndpoint.Speakerphone;

           case AudioRoutingEndpoint.Speakerphone:
               return AudioRoutingEndpoint.Earpiece;

               default:
               throw new OperationCanceledException();
       }
    }

    public void SetAudioRoute()
    {
        audioRouting.SetAudioEndpoint(this.ChangeAudioRoute());
    }

在此处输入图像描述

4

2 回答 2

8

Windows.Phone.Media.Devices 命名空间中的 API 需要 ID_CAP_AUDIOROUTING 和 ID_CAP_VOIP 功能。(将此添加到您的清单中)

此外,只能在进行 VOIP 通话时更改音频路由。

此外,您需要在后台 VOIP 进程中进行音频路由,而不是在前台进程中。

于 2013-03-06T22:16:31.460 回答
2

老问题,但现在我知道答案了。

你需要做的两件事:

  1. 将有问题的音频标记为“通信”

如何执行此操作取决于您使用的 API。它可以像 . 或者您可能必须使用 AudioClientProperties.eCategory = AudioCategory_Communications 的 AudioClientProperties 结构调用 IAudioClient2::SetClientProperties。

  1. 将您的应用程序标记为“IP 语音”应用程序或“语音邮件”应用程序您应该将名为 WindowsPhoneReservedAppInfo.xml 的文件添加到您的项目中,其中包含以下内容:

     <?xml version="1.0" encoding="utf-8"?>
     <WindowsPhoneReservedAppInfo         xmlns="http://schemas.microsoft.com/phone/2013/windowsphonereservedappinfo">
       <SoftwareCapabilities>
         <SoftwareCapability Id="ID_CAP_VOIP" />
       </SoftwareCapabilities>
     </WindowsPhoneReservedAppInfo>
    

在这里寻找更详细的解释:

从 Windows Phone 8.1 通用应用程序向听筒播放音频

于 2015-04-24T18:40:56.280 回答