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. 安卓源码默认开启USB调试

    找到\frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java下的 Settings.Global. ...

  2. JPA用法中字段起名规范

    前两天在学习Springboot使用JPA 来操作数据库时,碰到一个问题,最终发现了JPA写法中表字段名称要写规范. 记录下来提醒自己. CityEntity是一个City的实体类. 1 @Table ...

  3. Java基础00-多态19

    1. 多态 多态 1.1 多态概述 代码示例: 动物类: public class Animal { public void eat(){ System.out.println("动物吃东西 ...

  4. jquery性能优化建议-上篇

    一.注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading = $('#loading'); / ...

  5. Docker限制

    前言 Docker系列文章: 此篇是Docker系列的第十篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习Docker Do ...

  6. 开源ERP和其它ERP软件比较

    现在有许多企业将ERP项目,在企业中没有实施好,都归咎于软件产品不好.其实,这只是你们的借口.若想要将ERP软件真正与企业融合一体,首先得考虑企业的自身情况,再去选择适合的 ERP软件. 如果你的企业 ...

  7. Sql Server备份表,动态生成表名称

    1.常用的数据库备份表语句 SELECT * INTO tableNameNew FROM tableName 2.动态备份表,且备份表名称后面增加三位随机字符和当前日期 1 DECLARE @bak ...

  8. ContentObserver 内容观察者作用及特点

    eg: 1.定义Uri public static Uri KEY_BROWSER_URI = Uri.parse("content://com.android.browser.provid ...

  9. 探究Presto SQL引擎(1)-巧用Antlr

    一.背景 自2014年大数据首次写入政府工作报告,大数据已经发展7年.大数据的类型也从交易数据延伸到交互数据与传感数据.数据规模也到达了PB级别. 大数据的规模大到对数据的获取.存储.管理.分析超出了 ...

  10. 表单验证插件jquery-validation以及案例

    表单验证插件jquery-validation以及案例 1,获取并引入: (1)获取:官网:https://jqueryvalidation.org/ [home]->[files]->[ ...