2013-02-04 82 views
5

我嘗試過使用AudioRoutingManager類...但我有未經授權的訪問異常。 這裏是我的代碼如何通過耳機僅在Windows Phone 8應用程序中播放音頻

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()); 
    } 

enter image description here

回答

8

在Windows.Phone.Media.Devices命名空間中的API需要的ID_CAP_AUDIOROUTING和ID_CAP_VOIP能力。 (添加到您的清單)

此外,這是唯一可能改變音頻路由,而在一個活躍的VOIP呼叫。

此外,您需要在後臺VOIP進程中執行音頻路由,而不是在前臺進程中。

+0

不幸的是我們^ h ad試過了,將它添加到WMAppManifest.xml中: 。但是,會引發以下錯誤: 錯誤14'名稱'屬性無效 - 'ID_CAP_AUDIOROUTING'值根據其數據類型'字符串'無效 - 枚舉約束失敗。 –

+0

那是一個有點混亂。這個特定管理器的功能實際上是ID_CAP_VOIP。使用你的代碼,你不會在AudioRoutingManager上發生異常。但是我認爲除非正在進行呼叫,否則您仍然會在SetAudioEndPoint上。 –

+0

我有同樣的看法。從所有MS示例中,設置端點僅在VOIP呼叫正在進行時可用。這與操作系統一致,在操作系統中,呼叫只能在啓動後更改爲揚聲器。 –

2

老問題,但現在我知道答案。你需要做的

兩件事情:1。 標籤有問題的聲音爲「通信」

如何做到這一點取決於你所使用的API。它可以像。或者您可能需要使用AudioClientProperties.eCategory = AudioCategory_Communications的AudioClientProperties結構調用IAudioClient2 :: SetClientProperties。

  • 標記您的應用程序無論是作爲「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> 
    
  • 查找更詳細的解釋在這裏:

    Playing audio to the earpiece from a Windows Phone 8.1 universal app

    相關問題