第一个Windows Phone 8 程序开发之后台音频播放
标签:des style class blog c code
对于播客的音频应该是连续多个的列表,作为在后台连续播放。在网上搜了一下,通过wp8后台音频代理播放,而且例子都是静态的播放列表,不满足动态生成列表播放。
尝试着将播放列表对象声明为公有静态的,在外部对列表进行操作,发现这个静态的播放列表在agent里和我的操作类不是同一个引用,此方法行不通。
最后在
http://www.devdiv.com/forum.php?mod=redirect&goto=findpost&ptid=199381&pid=960706 找到了思路:
在wp中agent可以访问app的isolated
storage,所以最好app和agent在isolated storage中_共同维护一个播放列表。
最终得到如下的audioagent:
/*
Copyright (c) 2011 Microsoft Corporation. All rights reserved.
Use of this sample source code is subject to the terms of the Microsoft license
agreement under which you licensed this sample source code and is provided AS-IS.
If you did not accept the terms of the license agreement, you are not authorized
to use this sample source code. For the terms of the license, please see the
license agreement between you and Microsoft.
To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604
*/
using System;
using System.Windows;
using Microsoft.Phone.BackgroundAudio;
using System.Collections.Generic;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
using MyPodcast;
using MyPodcast.Controller;
namespace MyPodcast
{
public class AudioPlayer : AudioPlayerAgent
{
private static volatile bool _classInitialized;
// What‘s the current track?
static int currentTrackNumber = 0;
// A playlist made up of AudioTrack items.
public static List _playList;
private static IList
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.IsolatedStorage;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace MyPodcast
{
public class TrackManager
{
public static IList
考虑到在APP运行时有多种可能:
- 此时设备后台音频正在播放其他程序音频
- 设备后台音频处于暂停状态
- 设备后台音频处于停止状态
在APP里需要实现的功能有:
- 切换播放列表指定项
- 常规的播放,暂停,上一个,下一个
具体的使用逻辑:
在播放页面首先对后台音频状态进行检测,如果处于停止状态,则可以直接播放,系统会调用audioagent里的OnUserAction,此时播放列表为空,则读取本地的列表文件,之后进行播放操作;如果处于其他状态,在重新保存播放列表到本地后,则需要先停止后台音频,通过调用BackgroundAudioPlayer.Instance.Close();清空列表,需要注意的是,Audioagent
响应操作不是立即的,要等到BackgroundAudioPlayer.PlayerState
不为Playing才能继续后面的BackgroundAudioPlayer.Instance.Play()。
//关闭后台音频
BackgroundAudioPlayer.Instance.Close();
//等待后台音频状态为close状态后继续后面操作
await Task.Factory.StartNewint>(() =>
{
Thread.Sleep(100);
while (BackgroundAudioPlayer.Instance.Track != null || BackgroundAudioPlayer.Instance.PlayerState == PlayState.Playing)
{
Thread.Sleep(50);
}
return 0;
});
List
第一个Windows Phone 8 程序开发之后台音频播放,搜素材,soscw.com
第一个Windows Phone 8 程序开发之后台音频播放
标签:des style class blog c code
原文地址:http://www.cnblogs.com/lulee007/p/3737373.html
评论