Retrieve list of songs ordered by last play time in iOS

对着背影说爱祢 提交于 2019-12-01 01:27:01

问题


I need to obtain a list of the N most recently played songs from an iOS device, in order.

The only way I can imagine doing it, at the moment, is by getting all the songs through an MPMediaQuery and manually sort them by lastPlayedDate.

This is a potentially expensive operation and I was wondering if there was a better approach.


Edit: After some tests, this is a very expensive operation. On a test library of 2500 songs, it took around 20 seconds to:

  1. Get all the songs.
  2. Assign a date to all songs that had never played (January 1 1970).
  3. Order them by date.
  4. Fetch the first N entries.

Any suggestion of improvements would be appreciated.


Edit 2: Solved now, but just for the record here's what I was doing.

I was sorting using a block as described here: https://stackoverflow.com/a/805589/112702. Simply changing the sorting method to what's in Bryan's answer improved my speed by nearly 20 times on an iPod Touch 3.


回答1:


One way is to take the array of MPMediaItems you get from the MPMediaQuery and sort it by MPMediaItemPropertyLastPlayedDate using an NSSortDescriptor:

NSTimeInterval start  = [[NSDate date] timeIntervalSince1970];

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
NSArray *songsArray = [songsQuery items];

NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:MPMediaItemPropertyLastPlayedDate
                                                         ascending:NO];
NSArray *sortedSongsArray = [songsArray sortedArrayUsingDescriptors:@[sorter]];

NSTimeInterval finish = [[NSDate date] timeIntervalSince1970];
NSLog(@"Execution took %f seconds.", finish - start);

This sorts the new array by most recently played first. I tested this on a iPhone 4S using 2000 songs and it took .98 seconds.




回答2:


I think MPMediaQuery is the only way to get recently played songs from an iOS device at this time.

You can use property MPMediaItemPropertyLastPlayedDatewhich will return you the most recent calendar date and time on which the user played the media item. Value is an NSDate object.

http://developer.apple.com/library/IOs/#documentation/MediaPlayer/Reference/MPMediaItem_ClassReference/Reference/Reference.html#//apple_ref/doc/constant_group/General_Media_Item_Property_Keys



来源:https://stackoverflow.com/questions/14651641/retrieve-list-of-songs-ordered-by-last-play-time-in-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!