2013-02-04 38 views
5

Tôi đã thử với lớp AudioRoutingManager ... nhưng tôi đã có ngoại lệ không hợp lệ. đây là mã của tôicách phát âm thanh qua tai nghe chỉ trong cửa sổ điện thoại 8 ứng dụng

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

Trả lời

8

Các API trong không gian tên Windows.Phone.Media.Devices yêu cầu ID_CAP_AUDIOROUTING và khả năng ID_CAP_VOIP. (Thêm thông tin này vào tệp kê khai của bạn)

Ngoài ra, chỉ có thể thay đổi định tuyến âm thanh khi đang thực hiện cuộc gọi VOIP đang hoạt động.

Ngoài ra, bạn cần thực hiện định tuyến âm thanh trong quá trình VOIP nền của mình và không phải trong quá trình nền trước.

+0

Thật không may, chúng tôi h quảng cáo đã thử điều này, thêm nó vào WMAppManifest.xml: . Tuy nhiên, lỗi sau được ném: Lỗi 14 Thuộc tính 'Tên' không hợp lệ - Giá trị 'ID_CAP_AUDIOROUTING' không hợp lệ theo kiểu dữ liệu 'Chuỗi' - Ràng buộc liệt kê không thành công. –

+0

Điều đó hơi khó hiểu. Khả năng cho người quản lý cụ thể này thực sự là ID_CAP_VOIP. Sử dụng mã của bạn, bạn sẽ không nhận được ngoại lệ trên AudioRoutingManager. Nhưng tôi nghĩ bạn vẫn sẽ ở trên SetAudioEndPoint trừ khi cuộc gọi đang diễn ra. –

+0

Tôi có cùng quan điểm. Từ tất cả các ví dụ MS, thiết lập điểm cuối chỉ có sẵn trong khi đang thực hiện cuộc gọi VOIP. Điều này sẽ phù hợp với hệ điều hành, nơi một cuộc gọi chỉ có thể được thay đổi thành loa sau khi nó được bắt đầu. –

2

Câu hỏi cũ nhưng giờ tôi biết câu trả lời.

Hai điều mà bạn cần làm: 1. Tag âm thanh trong câu hỏi như "truyền thông"

Làm thế nào để làm điều này phụ thuộc vào những gì bạn đang sử dụng API. Nó có thể đơn giản như vậy. Hoặc bạn có thể phải gọi đến IAudioClient2 :: SetClientProperties với cấu trúc AudioClientProperties có AudioClientProperties.eCategory = AudioCategory_Communications.

  1. Tag ứng dụng của bạn dưới dạng "voice over IP" ứng dụng hoặc một "hộp thư thoại" ứng dụng Bạn nên thêm tập tin gọi là WindowsPhoneReservedAppInfo.xml để dự án của bạn với nội dung sau:

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

Hãy tìm lời giải thích chi tiết hơn ở đây:

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

Các vấn đề liên quan