我正在开发一个Windows Phone应用程序,需要检索和操作有关设备上播放的歌曲的信息。
我知道可以使用MediaPlayer.Queue.ActiveSong
获取当前正在播放的歌曲。
然而,我真正需要的是能够访问最近播放的曲目列表。
MediaHistory
和MediaHistoryItem
类似乎没有提供此功能。
真的有可能吗?怎么样?
答案 0 :(得分:1)
正如@Igor在他的回答中指出的那样,当前的API不允许这样做。但是,通过获取有关实际文件的一些信息,我们可以通过另一种方式合理地假设最近播放了特定的媒体文件。
我们可以使用GetBasicPropertiesAsync()
和RetrievePropertiesAsync()
来为我们提供该文件的DateAccessed
属性。
以下是从this MSDN页面获取的代码段:
public async void test()
{
try
{
StorageFile file = await StorageFile.GetFileFromPathAsync("Filepath");
if (file != null)
{
StringBuilder outputText = new StringBuilder();
// Get basic properties
BasicProperties basicProperties = await file.GetBasicPropertiesAsync();
outputText.AppendLine("File size: " + basicProperties.Size + " bytes");
outputText.AppendLine("Date modified: " + basicProperties.DateModified);
// Specify more properties to retrieve
string dateAccessedProperty = "System.DateAccessed";
string fileOwnerProperty = "System.FileOwner";
List<string> propertiesName = new List<string>();
propertiesName.Add(dateAccessedProperty);
propertiesName.Add(fileOwnerProperty);
// Get the specified properties through StorageFile.Properties
IDictionary<string, object> extraProperties = await file.Properties.RetrievePropertiesAsync(propertiesName);
var propValue = extraProperties[dateAccessedProperty];
if (propValue != null)
{
outputText.AppendLine("Date accessed: " + propValue);
}
propValue = extraProperties[fileOwnerProperty];
if (propValue != null)
{
outputText.AppendLine("File owner: " + propValue);
}
}
}
// Handle errors with catch blocks
catch (FileNotFoundException)
{
// For example, handle a file not found error
}
}
在变量中有DateAccessed
属性之后,我们可以看到它是最近的日期,比如昨天,或者甚至是2或3天前。然后我们就会知道,如果它在很短的时间内被访问过,那么它就可以播放了。
但是有一些警告。某些病毒扫描程序会更改文件和文件夹上的Timestamp属性,并且还需要打开文件来扫描它们,我认为这会更改DateAccessed
属性。但是,我见过的许多新的防病毒应用程序都会将时间戳信息恢复为原始状态,就好像它从未触及过该文件一样。
我相信这是此问题的最佳解决方法。 除非,您只关心您的应用最近播放文件的时间。然后,问题的答案就像管理您最近播放的媒体文件列表一样简单。
为了检索指定歌曲的PlayCount
,您可以使用MediaLibrary
类来访问该歌曲:
MediaLibrary library = new MediaLibrary();
然后只需访问这首歌:
Int32 playCount = library.Songs[0].PlayCount;
其中[0]
是您想要获取PlayCount的歌曲的索引。一种更简单的方法(取决于您已经如何访问歌曲,可能会执行以下操作:
Int32 playCount = library.Artists[selectedArtistIndex].Albums[selectedArtistAlbumIndex].Songs[selectedSongInAlbumIndex].PlayCount;
答案 1 :(得分:0)
目前的API无法使用。 MediaHistoryItem仅返回应用程序设置的最后一项,因此没用。