Created
June 10, 2013 04:41
-
-
Save bugcloud/5746575 to your computer and use it in GitHub Desktop.
How to use MPMediaQuery with UIWebView. Show album informations via Javascript function.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -(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