我有一个音频后台任务,其中包含以下内容:
BackgroundMediaPlayer.Current.SystemMediaTransportControls.IsPauseEnabled = true;
BackgroundMediaPlayer.Current.SystemMediaTransportControls.ButtonPressed += (sender, e) =>
{
Debug.WriteLine("Button pressed: " + e.Button.ToString());
};
当我按住按钮并在一秒钟后释放时,这是有效的。
我想在没有后台任务的情况下在前台使用它。是否可以在不使用BackgroundMediaPlayer
的情况下执行此操作?我已尝试使用MediaElement
,但我无法找到ButtonPressed
事件或类似事件。
答案 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
的引用。由于这是一个移动扩展命名空间,请在手机上运行它。