zoukankan      html  css  js  c++  java
  • Windows Phone 8.1 多媒体(3):音乐

    Windows Phone 8.1 多媒体(1):相片

    Windows Phone 8.1 多媒体(2):视频

    Windows Phone 8.1 多媒体(3):音乐


    (1)前台

    说是前台,其实音乐的播放都是利用系统后台的 BackgroundMediaPlayer:

    BackgroundMediaPlayer.Current.SetUriSource(new Uri("ms-appx:///djlang59_-_Drops_of_H2O_(_The_Filtered_Water_Treatment_).mp3"));
    BackgroundMediaPlayer.Current.Play();

    可以添加音乐播放状态改变事件:

    BackgroundMediaPlayer.Current.CurrentStateChanged += MediaPlayerStateChanged;
    
    private async void MediaPlayerStateChanged(MediaPlayer sender, object args
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            switch( BackgroundMediaPlayer.Current.CurrentState )
            {
                case MediaPlayerState.Stopped:
                    AppBarBtnPause.IsEnabled = false;
                    AppBarBtnStop.IsEnabled = false;
                    break;
                case MediaPlayerState.Playing:
                    AppBarBtnPause.IsEnabled = true;
                    AppBarBtnStop.IsEnabled = true;
    
                    BackgroundMediaPlayer.SendMessageToBackground(new ValueSet
                    {
                        {"Title", "Drops of H2O"},
                        {"Artist", "J.Lang"},
                    });
                    break;
                case MediaPlayerState.Paused:
                    AppBarBtnPause.IsEnabled = false;
                    break;
            }
        });
    }

    其中 BackgroundMediaPlayer.SendMessageToBackground 方法可以向后台音乐播放程序发送消息,可在后台程序中添加处理事件:

    BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;
    
    private void BackgroundMediaPlayerOnMessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)
    {
        systemmediatransportcontrol.DisplayUpdater.Type = MediaPlaybackType.Music;
        systemmediatransportcontrol.DisplayUpdater.MusicProperties.Title = e.Data["Title"].ToString();
        systemmediatransportcontrol.DisplayUpdater.MusicProperties.Artist = e.Data["Artist"].ToString();
        systemmediatransportcontrol.DisplayUpdater.Update();
    }

    (2)后台

    这里说的后台是指 SystemMediaTransportControls,也就是按下音量键后顶部弹出的控制音乐播放的控件。

    1)新建 Windows Runtime Component 和继承 IBackgroundTask 的后台类

    A:Run 方法中可设置 SystemMediaTransportControls 的各个按键属性以及事件的订阅(比如下一曲按钮可不可用,状态更改事件等)

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView();
        systemmediatransportcontrol.ButtonPressed += SystemControlsButtonPressed;
        systemmediatransportcontrol.IsEnabled = true;
        systemmediatransportcontrol.IsPauseEnabled = true;
        systemmediatransportcontrol.IsStopEnabled = true;
        systemmediatransportcontrol.IsPlayEnabled = true;
    
        BackgroundMediaPlayer.Current.CurrentStateChanged -= BackgroundMediaPlayerCurrentStateChanged;
        BackgroundMediaPlayer.MessageReceivedFromForeground -= BackgroundMediaPlayerOnMessageReceivedFromForeground;
        BackgroundMediaPlayer.Current.CurrentStateChanged += BackgroundMediaPlayerCurrentStateChanged;
        BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;
    
        deferral = taskInstance.GetDeferral();
    }

    B:事件的处理

    private void BackgroundMediaPlayerCurrentStateChanged(MediaPlayer sender, object args)
    {
        if (sender.CurrentState == MediaPlayerState.Playing)
        {
            systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Playing;
        }
        else if (sender.CurrentState == MediaPlayerState.Paused)
        {
            systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Paused;
        }
    }
    
    private static void SystemControlsButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
    {
        switch (args.Button)
        {
            case SystemMediaTransportControlsButton.Play:
                BackgroundMediaPlayer.Current.Play();
                break;
            case SystemMediaTransportControlsButton.Pause:
                BackgroundMediaPlayer.Current.Pause();
                break;
            case SystemMediaTransportControlsButton.Stop:
                BackgroundMediaPlayer.Current.Pause();
                BackgroundMediaPlayer.Current.Position = TimeSpan.FromSeconds(0);
                break;
        }
    }

    2)前台应用添加上一步新建的后台任务

  • 相关阅读:
    阿里测试工程师教你自动化测试如何准备测试数据
    同一个tomcat下部署多个springboot项目时,springboot项目无法正常启动的问题
    ant desgin pro 跨页面传参
    富兰克林的人生信条
    node 一拉管理工具 yarn安装(npm的替代品)
    python pip 安装包下载过慢的解决方法 socket.timeout: The read operation timed out
    springBoot 文件下载
    Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
    MYSQL like 模糊查询 分字查询
    人人译视界-给视频添加srt字幕
  • 原文地址:https://www.cnblogs.com/xiaoshi3003/p/3784174.html
Copyright © 2011-2022 走看看