public static async Task ShowToast(Music music, MediaPlaybackState state) { if (!App.Inited) { return; } if (music == null || Settings.settings.NotificationSend == NotificationSendMode.Never || (state != MediaPlaybackState.Playing && state != MediaPlaybackState.Paused)) { return; } NotificationDisplayMode display = Settings.settings.NotificationDisplay; if (Window.Current.Visible && (display == NotificationDisplayMode.Normal || display == NotificationDisplayMode.Quick)) { return; } if (IsToastActive(music, state)) { return; } Helper.Print("show toast"); ToastNotification toast = await BuildToast(music, state, display); lock (CurrentToastMap) { HideToast(); CurrentToastMap.TryAdd(new ToastKey { Music = music, State = state }, toast); try { lock (Notifier) { Notifier.Show(toast); Helper.Print("show toast, music: {0}, state: {1}", music.Name, state); } } catch (Exception) { // 通知已发布 } } }
private static async Task <ToastNotification> BuildToast(Music music, MediaPlaybackState state, NotificationDisplayMode display) { string toastTag = null; switch (state) { case MediaPlaybackState.Paused: toastTag = ToastTagPlaying; break; case MediaPlaybackState.Playing: toastTag = ToastTagPaused; break; } var toastContent = BuildToastContent(music, state, display); // Create the toast notification ToastNotification toast = new ToastNotification(toastContent.GetXml()) { Tag = toastTag, Group = ToastGroup, Data = new NotificationData() { SequenceNumber = 0 }, ExpiresOnReboot = true }; if (Settings.settings.ShowLyricsInNotification) { await LyricsHelper.SetLyrics(); toast.Data.Values["Lyrics"] = LyricsHelper.GetLyrics(); } if (display == NotificationDisplayMode.Quick) { toast.ExpirationTime = DateTime.Now.AddSeconds(Math.Min(10, music.Duration)); } //toast.Dismissed += (sender, args) => HideToast("Dismissed"); toast.Data.Values["MediaControlPosition"] = MediaHelper.Progress.ToString(); toast.Data.Values["MediaControlPositionTime"] = MusicDurationConverter.ToTime(MediaHelper.Position); return(toast); }
private static ToastContent BuildToastContent(Music music, MediaPlaybackState state, NotificationDisplayMode display) { ToastButton controlButton = null; switch (state) { case MediaPlaybackState.Paused: controlButton = BuildToastButton("Play"); break; case MediaPlaybackState.Playing: controlButton = BuildToastButton("Pause"); break; } var toastContent = new ToastContent() { Visual = new ToastVisual() { BindingGeneric = new ToastBindingGeneric() { Children = { new AdaptiveText() { Text = music.GetToastText() }, new AdaptiveProgressBar() { Value = new BindableProgressBarValue("MediaControlPosition"), ValueStringOverride = MusicDurationConverter.ToTime(music.Duration), Title = new BindableString("Lyrics"), Status = new BindableString("MediaControlPositionTime") } } } }, Actions = new ToastActionsCustom() { Buttons = { controlButton, BuildToastButton("Next") } }, ActivationType = ToastActivationType.Background, Launch = "Launch", Audio = SlientToast, Scenario = display == NotificationDisplayMode.Reminder || state == MediaPlaybackState.Paused ? ToastScenario.Reminder : ToastScenario.Default }; return(toastContent); }