我阅读了关于背景音频的msdn概述并看了一下示例应用程序,但我对消息和可以通过它们交换的数据有点困惑。
ValueSet messageDictionary = new ValueSet();
messageDictionary.Add("key", "value");
BackgroundMediaPlayer.SendMessageToBackground(messageDictionary);
新引入的对象ValueSet与KeyValuePairs(字符串,对象)必须用于前台和后台任务之间的通信。
我想发送自定义类的实例(比如说包含一个medialibrary的Artist,Album,Filepath等的Audiofiles)到后台任务。不幸的是,这是不可能的(=> Exception,类型不受支持) - 似乎只允许原始值。
当然,可能的是序列化数据。有没有人知道更简单的方法,或微软的推荐方式?
====================================
更新:
只有可能的方式似乎
(i)序列化数据并通过消息发送
(ii)将数据存储在文件中并传达后台任务以处理它们
尽管如此,我对此主题的任何建议表示感谢: - )
答案 0 :(得分:1)
您可以在后台任务中以字符串格式发送所有数据并在MessageReceivedFromForeground处理程序中切换键。这里有一个非常简单实用的例子: http://mark.mymonster.nl/2014/05/02/windows-phone-81ndashbackground-audio-in-windows-phone-store-apps
答案 1 :(得分:0)
[哎呀1年后......]
我使用的架构是你提到的两种方法的组合,第三种是我用的:
我的前后消息总是具有相同的结构:
此通信对象包含一个Action Enum值(这就是为什么不需要不同的键,更容易处理这种方式),并且所需的所有基本信息都包含在通信对象中 它工作得很好,只要你没有很多信息可以在后台和前台之间进行交换,序列化性能不应该成为问题。 它可能会被优化,但我不确定它是否值得。
通信的第二部分是一个文件,其作用类似于播放列表的数据库,并且只从前台写入。这样可以简化发送的数据,而不会出现并发写入问题。 在您的情况下,此文件将包含要播放的下一首歌曲的序列化xml,以及所有相关信息,并且该消息将仅包含此歌曲的ID以在列表中找到它。