我遇到了取代MediaControl的新SystemMediaTransportControl的问题。
目前,我的应用设置为: -
systemControls = SystemMediaTransportControls.GetForCurrentView();
systemControls.IsPlayEnabled = true;
systemControls.IsStopEnabled = true;
systemControls.IsPauseEnabled = true;
systemControls.ButtonPressed += SystemControls_ButtonPressed;
和
async void SystemControls_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
{
System.Diagnostics.Debug.WriteLine(args.Button);
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
switch (args.Button)
{
case SystemMediaTransportControlsButton.Play:
if (mediaElement1.CurrentState != MediaElementState.Playing)
{
restartSource();
}
else
{
completeClosure();
}
break;
case SystemMediaTransportControlsButton.Pause:
case SystemMediaTransportControlsButton.Stop:
completeClosure();
break;
default:
break;
}
});
}
和
private async void completeClosure()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
mediaElement1.Stop();
mediaElement1.Source = null;
timer.Stop();
});
}
private async void restartSource()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
mediaElement1.Source = new Uri(holdThisSource, UriKind.Absolute);
mediaElement1.Play();
timer.Start();
});
}
当用户按下暂停按钮时,args.Button显示为“Play”,因此需要检查MediaElement的状态。但是,当我尝试恢复到媒体时,它会在restartSource()中成功恢复并相应地更新应用程序,但音量控制上的图标不会从Play符号更改,尽管硬件按钮仍然有效。
除此之外,按下硬件停止按钮永远不会工作,甚至无法显示在Debug.WriteLine中。
这是一个在线流媒体应用,其中源不允许恢复,因此我必须以这种方式关闭流。
我很乐意帮忙。
答案 0 :(得分:1)
由于您未更新systemControls.PlaybackStatus
,因此传输控件上的控制按钮不会自动更改为正确状态。
当播放状态发生变化时,您应该始终更新systemControls.PlaybackStatus
属性。
这可以解决你的问题。