C#   code 后台任务

----------------------------

public sealed class BgTask : IBackgroundTask

{

#region 私有字段

SystemMediaTransportControls mdcontrol = null;

BackgroundTaskDeferral deferral = null;

MediaPlayer currentPlayer = null;

// 后台音频是否已运行的标志

bool isRunning = false;

// 指示是否第一次播放

bool isFirstPlaying = false;

#endregion

public void Run(IBackgroundTaskInstance taskInstance)

{

//mdcontrol = SystemMediaTransportControls.GetForCurrentView();

//mdcontrol.IsEnabled = true;

//// 允许使用播放/暂停按钮

//mdcontrol.IsPlayEnabled = true;

//mdcontrol.IsPauseEnabled = true;

//// 处理ButtonPressed事件

//mdcontrol.ButtonPressed += mdcontrol_ButtonPressed;

// 获取MediaPlayer实例

currentPlayer = BackgroundMediaPlayer.Current;

// 处理事件,接收来自前台应用程序的消息

BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground;

// 关闭自动开始播放

currentPlayer.AutoPlay = false;

// 设置播放源

Uri audioUri = new Uri("ms-appx:///我爱我家.mp3");

currentPlayer.SetUriSource(audioUri);

deferral = taskInstance.GetDeferral();

// 当后台任务被取消时引发事件

taskInstance.Canceled += task_Canceled;

isRunning = true;

}

private void task_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)

{

// 解除事件绑定

mdcontrol.ButtonPressed -= mdcontrol_ButtonPressed;

BackgroundMediaPlayer.MessageReceivedFromForeground -= BackgroundMediaPlayer_MessageReceivedFromForeground;

// 通知系统后台任务完成

deferral.Complete();

}

private void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)

{

// 接收消息

ValueSet val = e.Data;

if (val.ContainsKey("action"))

{

string msg = val["action"] as string;

if (msg.Equals("play")) //播放

{

isFirstPlaying = true;

Play();

isFirstPlaying = false;

}

else //暂停

{

Pause();

}

}

}

void mdcontrol_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)

{

// 如果用户按下了播放键

if (args.Button == SystemMediaTransportControlsButton.Play)

{

Play();

}

// 如果用户按下了暂停按钮

else if (args.Button == SystemMediaTransportControlsButton.Pause)

{

if (currentPlayer.CurrentState == MediaPlayerState.Playing)

{

Pause();

}

}

}

#region 私有方法

/// <summary>

/// 播放

/// </summary>

void Play()

{

if (isRunning)

{

currentPlayer.Play();

if (isFirstPlaying)

{

// 更新系统多媒体控制界面的显示内容

//  SystemMediaTransportControlsDisplayUpdater displayUpdater = mdcontrol.DisplayUpdater;

// 显示类型为音乐

//displayUpdater.Type = MediaPlaybackType.Music;

//// 设置显示的字段值

//displayUpdater.MusicProperties.Artist = "戴娆";

//displayUpdater.MusicProperties.Title = "我爱我家";

//// 更新显示

//displayUpdater.Update();

}

}

}

/// <summary>

/// 暂停

/// </summary>

void Pause()

{

if (isRunning)

{

currentPlayer.Pause();

}

}

#endregion

}

前台code

-------------------------------------------------------

public sealed partial class MainPage : Page

{

public MainPage()

{

this.InitializeComponent();

this.NavigationCacheMode = NavigationCacheMode.Required;

}

/// <summary>

/// 在此页将要在 Frame 中显示时进行调用。

/// </summary>

/// <param name="e">描述如何访问此页的事件数据。

/// 此参数通常用于配置页。</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// TODO: 准备此处显示的页面。

// TODO: 如果您的应用程序包含多个页面,请确保

// 通过注册以下事件来处理硬件“后退”按钮:

// Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。

// 如果使用由某些模板提供的 NavigationHelper,

// 则系统会为您处理该事件。

}

private void OnPlay(object sender, RoutedEventArgs e)

{

SendMessageToBackaudio("action", "play");

}

private void OnPause(object sender, RoutedEventArgs e)

{

SendMessageToBackaudio("action", "pause");

}

[Obsolete]

private void SendMessageToBackaudio(string key, object val)

{

ValueSet data = new ValueSet();

data[key] = val;

BackgroundMediaPlayer.SendMessageToBackground(data);

}

}

前台的xml 代码

-----------------------------------------------------------

<Page

x:Class="TestApp.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:TestApp"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d"

Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<StackPanel Margin="15">

<Button Content="播放" Click="OnPlay"/>

<Button Content="暂停" Click="OnPause"/>

</StackPanel>

</Page>

public sealed class BgTask : IBackgroundTask    {        #region 私有字段        SystemMediaTransportControls mdcontrol = null;        BackgroundTaskDeferral deferral = null;        MediaPlayer currentPlayer = null;        // 后台音频是否已运行的标志        bool isRunning = false;        // 指示是否第一次播放        bool isFirstPlaying = false;        #endregion              public void Run(IBackgroundTaskInstance taskInstance)        {            //mdcontrol = SystemMediaTransportControls.GetForCurrentView();            //mdcontrol.IsEnabled = true;            //// 允许使用播放/暂停按钮            //mdcontrol.IsPlayEnabled = true;            //mdcontrol.IsPauseEnabled = true;            //// 处理ButtonPressed事件            //mdcontrol.ButtonPressed += mdcontrol_ButtonPressed;            // 获取MediaPlayer实例            currentPlayer = BackgroundMediaPlayer.Current;            // 处理事件,接收来自前台应用程序的消息            BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground;            // 关闭自动开始播放            currentPlayer.AutoPlay = false;            // 设置播放源            Uri audioUri = new Uri("ms-appx:///我爱我家.mp3");            currentPlayer.SetUriSource(audioUri);            deferral = taskInstance.GetDeferral();            // 当后台任务被取消时引发事件            taskInstance.Canceled += task_Canceled;            isRunning = true;        }
        private void task_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)        {            // 解除事件绑定            mdcontrol.ButtonPressed -= mdcontrol_ButtonPressed;            BackgroundMediaPlayer.MessageReceivedFromForeground -= BackgroundMediaPlayer_MessageReceivedFromForeground;            // 通知系统后台任务完成            deferral.Complete();        }
        private void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)        {            // 接收消息            ValueSet val = e.Data;            if (val.ContainsKey("action"))            {                string msg = val["action"] as string;                if (msg.Equals("play")) //播放                {                    isFirstPlaying = true;                    Play();                    isFirstPlaying = false;                }                else //暂停                {                    Pause();                }            }        }
        void mdcontrol_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)        {            // 如果用户按下了播放键            if (args.Button == SystemMediaTransportControlsButton.Play)            {                Play();            }            // 如果用户按下了暂停按钮            else if (args.Button == SystemMediaTransportControlsButton.Pause)            {                if (currentPlayer.CurrentState == MediaPlayerState.Playing)                {                    Pause();                }            }        }
        #region 私有方法        /// <summary>        /// 播放        /// </summary>        void Play()        {            if (isRunning)            {                currentPlayer.Play();                if (isFirstPlaying)                {                    // 更新系统多媒体控制界面的显示内容                  //  SystemMediaTransportControlsDisplayUpdater displayUpdater = mdcontrol.DisplayUpdater;                    // 显示类型为音乐                    //displayUpdater.Type = MediaPlaybackType.Music;                    //// 设置显示的字段值                    //displayUpdater.MusicProperties.Artist = "戴娆";                    //displayUpdater.MusicProperties.Title = "我爱我家";                    //// 更新显示                    //displayUpdater.Update();                }            }        }
        /// <summary>        /// 暂停        /// </summary>        void Pause()        {            if (isRunning)            {                currentPlayer.Pause();            }        }        #endregion    }

uwp 之后台音频的更多相关文章

  1. Windows 10 后台音频

    UWP版本的网易云音乐已经上架,虽然还不支持Windows Phone但是整体而言功能已经比较齐全了! 那么如何在Windows 10 UWP实现后台播放呢? 我之前是一直在做Windows Phon ...

  2. Windows Phone background Audio 后台音频

    Windows Phone 后台音频的确不是什么新鲜的话题了,但发现目前在WP平台的音频播放应用多多少少会有一些瑕疵,所以在此给大家在此介绍下这个功能给有需要的朋友们. 首先介绍下我们的应用在后台播放 ...

  3. uwp 中的音频开发

    xml code --------------------------------------------------- <UserControl x:Class="WinTest.H ...

  4. iOS AvPlayer AvAudioPlayer音频的后台播放问题

    iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...

  5. 与众不同 windows phone (15) - Media(媒体)之后台播放音频

    原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页][源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音频 ...

  6. iOS音频的后台播放总结

     在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播 ...

  7. ios程序后台运行设置(不是太懂)

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以, 1.音乐 2.location 3.voip 文 ...

  8. 重新想象 Windows 8 Store Apps (65) - 后台任务: 音乐的后台播放和控制

    [源码下载] 重新想象 Windows 8 Store Apps (65) - 后台任务: 音乐的后台播放和控制 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台 ...

  9. 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能

    [源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...

随机推荐

  1. C语言不明白

    C语言查看多字节变量中每单个字节数据的方法代码: #include<stdio.h> void main() { int a=0x21109225;char* pAddress=(char ...

  2. 剖析:如何用 SwiftUI 5天组装一个微信 —— 通讯录发现我篇

    前置资源 GitHub: SwiftUI-WeChatDemo 第零章:用 SwiftUI 5天组装一个微信 第一章:剖析:如何用 SwiftUI 5天组装一个微信 -- 聊天界面篇 通讯录 通讯录的 ...

  3. urllib库中的URL编码解码和GETPOST请求

    在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式.这就需要用urllib中的parse模块.parse的使用 ...

  4. 2018年一名合格的web前端程序员应该会哪些技术

    有朋友让小编说一说web前端在未来几年的发展趋向,对于这个问题,恕小编无能为力,web前端技术日新月异,更新非常快,谁也不能预料未来会发生些什么 小编也只能说在2018年,react native和j ...

  5. CocoaPods 私有化

    一.创建所需要的代码仓库 创建 Spec 私有索引库(ZFSpec),用来存放本地spec 创建模块私有库(ZFPodProject),用来存放项目工程文件 二.私有索引库添加到本地 CocoaPod ...

  6. 【Mysql】InnoDB 引擎中的页目录

    一.页目录和槽 接上一篇,现在知道记录在页中按照主键大小顺序串成了单链表. 那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找 ...

  7. gnome环境设置

    1.gnome的环境安装sudo apt-get install gnome2.选择gdm3 开机显示不正常:could not apply the stored configuration for ...

  8. 第六篇--MFC美化界面

    1.MFC如何设置背景颜色 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CT ...

  9. Easyui设置easyui-textbox不可编辑

    转载自:https://blog.csdn.net/qq_23113521/article/details/78801689 在easyui里由于easyui-textbox被封装,通过一般的jque ...

  10. Gateway网关匹配规则

    Gateway匹配规则 重要概念 路由 route 断言 predicate 过滤器 fliter 一.时间匹配 在 after 时间之后的所有请求转发到 URI中的地址 gateway: disco ...