c# – 检查用户是否在Windows Phone 8.1上添加了新音乐

我试图找出用户是否在手机上的音乐文件夹中添加了新音乐,因为应用上次使用了该应用.

我尝试通过检查音乐文件夹的DateModified(在向手机添加新音乐时在计算机上正确更新)来执行此操作:

async void GetModifiedDate ()
{
    BasicProperties props = await KnownFolders.MusicLibrary.GetBasicPropertiesAsync();
    Debug.WriteLine("DATEMODIFIED: " + props.DateModified.ToString());
}

不幸的是,这回归

DATEMODIFIED: 1/1/1601 1:00:00 AM +01:00

我做错了还是有另一种快速方法来检查用户是否添加了新音乐?

最佳答案
KnownFolders.MusicLibrary
virtual location.因此我认为,获得其属性可能是一个问题.

另一个问题是DateModified可能是个坏主意,因为当用户添加文件时它可能保持不变.你无法接力. (some information).你可以检查一下 – 当我试图在文件夹中移动文件时,他们的DateModified没有改变.

所以在这种情况下,我担心你必须在MusicLibrary中列出你的文件,然后决定保存什么以供将来比较.文件大小的总和可能是个好主意,因此两个不同的音乐文件大小相同的可能性很小.如果用户已将文件从一个文件夹移动到另一个文件夹(总大小不会更改),则还需要通知您.如果你想确保更多,你可以记住Tuple< file.FolderRelativeId,fileSize>的整个列表. (例如).

由于FileQueries尚不适用于Windows Phone,因此您必须以递归方式检索文件,简单代码可能如下所示:

// first - a method to retrieve files from folder recursively 
private async Task RetriveFilesInFolder(List<StorageFile> list, StorageFolder parent)
{
    foreach (var item in await parent.GetFilesAsync()) list.Add(item);
    foreach (var item in await parent.GetFoldersAsync()) await RetriveFilesInFolder(list, item);
}

private async Task<List<StorageFile>> GetFilesInMusic()
{
    StorageFolder folder = KnownFolders.MusicLibrary;
    List<StorageFile> listOfFiles = new List<StorageFile>();
    await RetriveFilesInFolder(listOfFiles, folder);
    return listOfFiles;
}

获得文件列表后,您可以决定要记住哪些内容,以便在下次应用启动时进行进一步比较.

点赞