在Windows Phone 8.1中检测耳机

时间:2014-11-28 11:14:39

标签: c# windows-phone windows-phone-8.1

对于我的Windows Phone 8.1 RT应用程序,我需要检测是否已插入耳机。

我发现这些问题可以解决Windows Phone 8.0和Windows Phone 8.1 Silverlight应用程序的这个问题: Windows Phone - Audio Endpoint Device

它在我的主视图的代码隐藏中尝试了此代码(实际上是从http://developer.nokia.com/community/wiki/How_to_detect_the_audio_path_(headset_connection)_on_Windows_Phone复制的):

   AudioRoutingEndpoint currentAudioRoutingEndpoint = AudioRoutingManager.GetDefault().GetAudioEndpoint();
   AudioRoutingManager.GetDefault().AudioEndpointChanged += AudioEndpointChanged_Handler;

和处理程序:

   private void AudioEndpointChanged_Handler(AudioRoutingManager sender, object args)
    {
        var audioEndPoint = sender.GetAudioEndpoint();
        switch (audioEndPoint)
        {
            case AudioRoutingEndpoint.Default:
                {
                    //default audio devide
                    break;
                }
            case AudioRoutingEndpoint.Earpiece:
                {
                    //Earpiece
                    break;
                }
            case AudioRoutingEndpoint.Speakerphone:
                {
                    //Speakerphone
                    break;
                }
            case AudioRoutingEndpoint.Bluetooth:
                {
                    //Bluetooth
                    break;
                }
            case AudioRoutingEndpoint.WiredHeadset:
                {
                    //WiredHeadset
                    break;
                }
            case AudioRoutingEndpoint.WiredHeadsetSpeakerOnly:
                {
                    //WiredHeadsetSpeakerOnly
                    break;
                }
            case AudioRoutingEndpoint.BluetoothWithNoiseAndEchoCancellation:
                {
                    //BluetoothWithNoiseAndEchoCancellation
                    break;
                }
            default:
                throw new ArgumentOutOfRangeException();
        }
    }

如果我运行此代码,我会收到此异常:     用户代码HResult = -2147024891未处理System.UnauthorizedAccessException     消息=访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))

我想这是因为缺少所需的功能(ID_CAP_VOIP和ID_CAP_AUDIOROUTING)。 现在我的问题是,在我的Windows Phone 8.1 RT应用程序中只有package.appxmanifest而没有WMAppManifest.xml,似乎我无法再定义这些功能。

请注意,我的项目中没有WMAppManifest.xml,因为它将出现在Windows Phone 8.1 Silverlight项目中(实际上两者都可用)。

  • 有没有办法为我的WP 8.1 RT应用程序添加这些功能?
  • 或者是否有另一种检测Windows Phone 8.1 RT耳机的方法我还没找到?

我真的很感激任何帮助!

编辑:将Windows Phone 8.1 xaml更改为Windows Phone 8.1 RT

2 个答案:

答案 0 :(得分:1)

所以有两件事:

  1. 此功能在VOIP呼叫期间仅可用 ,在VOIP呼叫的后台任务中仅 - 请参阅this answer上的评论。< / LI>
  2. 这些VOIP功能仅 可用于Windows Phone 8.1 Silverlight应用程序,并且仅适用于VOIP后台任务。所以WinRT 8.1或通用应用程序没有运气。 The MSDN documentation is here(其他features not available in Phone 8.1 WinRT here的列表)
  3. 所以..你可能无法在Windows Phone上做你想做的事情(除非你正在构建一个VOIP应用程序)。

    您尝试使用此功能实现了哪些功能?也许有另一种选择。

答案 1 :(得分:1)

在WP8.1运行时,您可以使用以下代码创建一个xml文件WindowsPhoneReserveAppInfo.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>

工作正常。祝你好运!