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语言:if条件写法

    if 语句的判断条件中不是必须要包含关系运算符,它可以是赋值表达式,甚至也可以是一个变量,常量 例如: //情况① if(b){ //TODO: } //情况② if(b=5){ //情况① //TO ...

  2. [刘阳Java]_纯CSS代码实现内容过滤效果

    继续我们技术专题课,我们今天给大家带来的是一个比较酷炫的"纯CSS代码实现内容过滤效果",没有加入任何JS的效果.全部都是应用CSS3的新增选择器来实现的.先看效果截图 实现思路 ...

  3. 【LeetCode】724. 寻找数组的中心下标

    724. 寻找数组的中心下标 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的 ...

  4. Python Unittest简明教程

    1 概述 单元测试框架是一种软件测试方法,通过来测试源代码中的各个单元,例如类,方法等,以确定它们是否符合要求.直观上来说,可以将单元视为最小的可测试部分.单元测试是程序员在开发过程中创建的短代码片段 ...

  5. 前端基础html(二)

    一.html的概念 1.概念:超文本标记语言. 2.超文本,超链接:超级不仅有文本,图片,还有音频,视频等. 3.html:作用:   显示服务器端的响应结果. 二.互联网三大基石 1.url:统一资 ...

  6. 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【五】

    BearPi-HM_Nano开发板鸿蒙OS内核编程开发--消息队列 什么是消息队列?        答:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题.实现高性能. ...

  7. xmind2020 zen 10.2.1win/mac/linux安装教程

    xmind是一款优秀的思维导图软件,本文教大家如何安装xmind zen 2020 10.2.1版本,解锁使用全部功能,包括去掉xmind zen水印.上传图片等功能,支持windows/mac/li ...

  8. Python - 浅拷贝的四种实现方式

    浅拷贝详解 https://www.cnblogs.com/poloyy/p/15084277.html 方式一:使用切片 [:] 列表 # 浅拷贝 [:] old_list = [1, 2, [3, ...

  9. 【动画消消乐 】仿ios、android中常见的一个loading动画 074

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  10. 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列

    目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...