iPhone sdk, save MPMediaItemCollection?

4.2k Views Asked by At

I have my application displaying a MPMediaPickerController. I would like to save the MediaItem and start it playing again on startup. I think this is doable using the MPMediaQuery. It seems, I should be using the MPMediaItemPropertyPersistentID but I am not sure how to query for it. Any thoughts?

2

There are 2 best solutions below

1
Valera On BEST ANSWER

Man, you dont need to save mediaCollection. media collection it is just array of MPMediaItem objects. So you'd better save persistentIds of this items. it's quite easy

//it's how to know persistentId of the song after you got mediaItemCollection from your mediaPickerViewController
//then you can sav it in userDefaults.
- (NSNumber *)getPersistentId :(MPMediaItemCollection *)collection atIndex:(int)index {
 MPMediaItem *mediaItem = [collection.items objectAtIndex:index];
 NSNumber *anId = [mediaItem valueForProperty:MPMediaItemPropertyPersistentID];
 return anId;
}

//when your application will be launched next time you can get required song:
- (void)obtainSongWitId:(NSNumber *)persistentId {
 MPMediaQuery *query = [MPMediaQuery songsQuery];
 MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:persistentId forProperty:MPMediaItemPropertyPersistentID];
 [query addFilterPredicate:predicate];
 NSArray *mediaItems = [query items];
 //this array will consist of song with given persistentId. add it to collection and play it
 MPMediaItemCollection *col = [[MPMediaItemCollection alloc] initWithItems:mediaItems];
 ///....
 [col release];
}
0
rickchatham On

This should work:

MPMediaQuery *query = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:myPersistentID forProperty:MPMediaItemPropertyPersistentID];

[query addFilterPredicate:predicate];
NSArray *songs = [query items];