Skip to content

Instantly share code, notes, and snippets.

@bugcloud
Created June 10, 2013 04:41
Show Gist options
  • Select an option

  • Save bugcloud/5746575 to your computer and use it in GitHub Desktop.

Select an option

Save bugcloud/5746575 to your computer and use it in GitHub Desktop.
How to use MPMediaQuery with UIWebView. Show album informations via Javascript function.
-(void)fetchAlbums
{
MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery];
NSMutableArray *albums = [@[] mutableCopy];
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd"];
NSArray *jsonKeysAndValues =
@[
@{ @"key": @"MPMediaEntityPropertyPersistentID", @"value" : MPMediaEntityPropertyPersistentID },
@{ @"key": @"MPMediaItemPropertyMediaType", @"value" : MPMediaItemPropertyMediaType },
@{ @"key": @"MPMediaItemPropertyTitle", @"value" : MPMediaItemPropertyTitle },
@{ @"key": @"MPMediaItemPropertyAlbumTitle", @"value" : MPMediaItemPropertyAlbumTitle },
@{ @"key": @"MPMediaItemPropertyArtist", @"value" : MPMediaItemPropertyArtist },
@{ @"key": @"MPMediaItemPropertyAlbumArtist", @"value" : MPMediaItemPropertyAlbumArtist },
@{ @"key": @"MPMediaItemPropertyGenre", @"value" : MPMediaItemPropertyGenre },
@{ @"key": @"MPMediaItemPropertyComposer", @"value" : MPMediaItemPropertyComposer },
@{ @"key": @"MPMediaItemPropertyPlaybackDuration", @"value" : MPMediaItemPropertyPlaybackDuration },
@{ @"key": @"MPMediaItemPropertyAlbumTrackNumber", @"value" : MPMediaItemPropertyAlbumTrackNumber },
@{ @"key": @"MPMediaItemPropertyAlbumTrackCount", @"value" : MPMediaItemPropertyAlbumTrackCount },
@{ @"key": @"MPMediaItemPropertyDiscNumber", @"value" : MPMediaItemPropertyDiscNumber },
@{ @"key": @"MPMediaItemPropertyDiscCount", @"value" : MPMediaItemPropertyDiscCount },
@{ @"key": @"MPMediaItemPropertyArtwork", @"value" : MPMediaItemPropertyArtwork },
@{ @"key": @"MPMediaItemPropertyLyrics", @"value" : MPMediaItemPropertyLyrics },
@{ @"key": @"MPMediaItemPropertyIsCompilation", @"value" : MPMediaItemPropertyIsCompilation },
@{ @"key": @"MPMediaItemPropertyReleaseDate", @"value" : MPMediaItemPropertyReleaseDate },
@{ @"key": @"MPMediaItemPropertyBeatsPerMinute", @"value" : MPMediaItemPropertyBeatsPerMinute },
@{ @"key": @"MPMediaItemPropertyComments", @"value" : MPMediaItemPropertyComments },
@{ @"key": @"MPMediaItemPropertyAssetURL", @"value" : MPMediaItemPropertyAssetURL },
// Podcast Item Property Keys or User-Defined Property Keys
@{ @"key": @"MPMediaItemPropertyPlayCount", @"value" : MPMediaItemPropertyPlayCount },
@{ @"key": @"MPMediaItemPropertySkipCount", @"value" : MPMediaItemPropertySkipCount },
@{ @"key": @"MPMediaItemPropertyRating", @"value" : MPMediaItemPropertyRating },
@{ @"key": @"MPMediaItemPropertyLastPlayedDate", @"value" : MPMediaItemPropertyLastPlayedDate },
@{ @"key": @"MPMediaItemPropertyUserGrouping", @"value" : MPMediaItemPropertyUserGrouping },
@{ @"key": @"MPMediaItemPropertyBookmarkTime", @"value" : MPMediaItemPropertyBookmarkTime }
];
for (MPMediaItemCollection *collection in [albumQuery collections]) {
NSMutableDictionary *album = [@{} mutableCopy];
MPMediaItem *song = [collection representativeItem];
for (NSDictionary *dict in jsonKeysAndValues) {
if (
[song respondsToSelector:NSSelectorFromString(dict[@"value"])] &&
[song valueForKey:dict[@"value"]] != nil
) {
if ([dict[@"key"] isEqualToString:@"MPMediaItemPropertyArtwork"]) {
UIImage *artworkImage = [[song valueForKey:dict[@"value"]] imageWithSize:CGSizeMake(90.0, 90.0)];
NSData *imageData = UIImageJPEGRepresentation(artworkImage, 1.0);
if (imageData) {
//album[ dict[@"key"] ] = [self imageDataToBase64String:imageData];
album[ dict[@"key"] ] = [self imageDataToFilePath:imageData fileName:[song valueForKey:MPMediaEntityPropertyPersistentID]];
}
} else if (
[dict[@"key"] isEqualToString:@"MPMediaItemPropertyReleaseDate"] ||
[dict[@"key"] isEqualToString:@"MPMediaItemPropertyLastPlayedDate"]
) {
album[ dict[@"key"] ] = [formatter stringFromDate:[song valueForKey:dict[@"value"]]];
} else {
album[ dict[@"key"] ] = [song valueForKey:dict[@"value"]];
}
}
}
[albums addObject:album];
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:albums
options:0
error:&error
];
if (!jsonData) {
NSLog(@"ERROR %@", [error description]);
} else {
NSString *jsonStr = [[NSString alloc] initWithBytes:[jsonData bytes]
length:[jsonData length]
encoding:NSUTF8StringEncoding
];
NSString *js = [NSString stringWithFormat:@"someFunction(%@);", jsonStr];
[webView_ stringByEvaluatingJavaScriptFromString:js];
}
}
- (NSString*) imageDataToBase64String:(NSData *)imageData
{
return [imageData base64EncodedString];
}
- (NSString*) imageDataToFilePath:(NSData *)imageData fileName:(NSString *)fileName
{
NSString *savePath = [NSString stringWithFormat:@"Documents/%@.jpg", fileName];
savePath = [NSHomeDirectory() stringByAppendingPathComponent:savePath];
if (![[NSFileManager defaultManager] fileExistsAtPath:savePath]) {
[imageData writeToFile:savePath atomically:YES];
}
return [NSString stringWithFormat:@"file://%@", savePath];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment