当应用程序处于前台时,检测到3.5毫米插孔按钮

时间:2016-05-06 09:40:01

标签: win-universal-app

我有一个音频后台任务,其中包含以下内容:

BackgroundMediaPlayer.Current.SystemMediaTransportControls.IsPauseEnabled = true;
BackgroundMediaPlayer.Current.SystemMediaTransportControls.ButtonPressed += (sender, e) =>
{ 
    Debug.WriteLine("Button pressed: " + e.Button.ToString());
};

当我按住按钮并在一秒钟后释放时,这是有效的。

我想在没有后台任务的情况下在前台使用它。是否可以在不使用BackgroundMediaPlayer的情况下执行此操作?我已尝试使用MediaElement,但我无法找到ButtonPressed事件或类似事件。

1 个答案:

答案 0 :(得分:0)

是的,可以使用MediaElement和SystemMediaTransportControls类。SystemMediaTransportControls class包含ButtonPressed事件。文档System Media Transport Controls指导如何执行此操作。并且offical sample已经满足您的要求。您可以直接测试样品。以下是示例代码的一部分。

Xaml Code

<MediaElement x:Name="MyMediaElement" Margin="0,0,10,0" AudioCategory="Media" AreTransportControlsEnabled="True" VerticalAlignment="Top"/>

背后的代码

private SystemMediaTransportControls systemMediaControls = SystemMediaTransportControls.GetForCurrentView();    
systemMediaControls.IsEnabled = true;
systemMediaControls.ButtonPressed += systemMediaControls_ButtonPressed;
private async void systemMediaControls_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
        {
            switch (args.Button)
            {
                case SystemMediaTransportControlsButton.Pause:
                    Debug.WriteLine("Button pressed: ");
                    break;
            }
        });
    }
  

是的,当我按下插入耳机端口的按钮时,它不会被呼叫。

如果您想在耳机插入时触发事件,请使用此API AudioRoutingManager。代码示例如下:

 private void Detectheadset_Click(object sender, RoutedEventArgs e)
 {
     AudioRoutingManager manager = AudioRoutingManager.GetDefault();
     manager.AudioEndpointChanged += Manager_AudioEndpointChanged;        
 }

 private void Manager_AudioEndpointChanged(AudioRoutingManager sender, object args)
 { 
 }

注意添加相对功能并添加Windows Mobile Extensions for the UWP的引用。由于这是一个移动扩展命名空间,请在手机上运行它。