MPMediaItem和iTunes匹配

我有一个使用iPod Library API访问iOS中的歌曲数据库的应用程序。 随着iTunes Match的发布,任何不在设备上的歌曲都将无法加载。 有没有办法让我下载歌曲的请求? 也许使用新的iCloud API?

编辑:要清楚我不问如何使用iPhone下载iTunes Match的歌曲。 iOS SDK允许通过MPMediaQuery / MPMediaItems访问iPod库。 在具有iTunes Matchfunction的iOS设备上,通过MPMediaQuery返回在您的iTunes匹配库中但不在设备上的本地歌曲,但MPMediaItems的“可导出”标志设置为false。 当我在音乐应用程序中访问这些歌曲时,它们会自动下载。 我想通过MPMediaItem触发相同的自动下载。

我已经看到iTunes Match中的项目被评为iCloud的一部分,iOS 5 SDK中有一个新的iCloud部分。 但据我所知,我只能得到数据我的应用程序上传。 我希望通过MPMediaItem或通过iCloud使用URL触发iTunes Match下载。

我find了一些东西,但不是很好。 如果您select要通过iPod播放器播放的歌曲,则会触发下载。 您可以使用MPMusicPlayerController访问iPod播放器。

MPMusicPlayerController *mDRMAudioPlayer; mDRMAudioPlayer = [MPMusicPlayerController iPodMusicPlayer]; MPMediaQuery *assetQuery = [[MPMediaQuery alloc] init]; NSNumber *persistentID = [mediaItem valueForProperty: MPMediaItemPropertyPersistentID]; MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue: persistentID forProperty: MPMediaItemPropertyPersistentID]; [assetQuery addFilterPredicate: predicate]; [mDRMAudioPlayer setQueueWithQuery: assetQuery]; [mDRMAudioPlayer play]; 

没有任何反馈,如果这真的开始下载或没有,或下载的进展,但项目将开始下载,如果你的连接是好的,它将发挥第一次(否则你可以发送垃圾邮件,它会得到启动)。

MPMediaItem | iCloud或DRM保护

上面的链接显示了如何使用iOS 6中引入的属性来查看MPMediaItem是否在云中。

MPMediaItemPropertyIsCloudItem

 BOOL isCloud = FALSE; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { NSNumber *isCloudNumber = [mediaItem valueForProperty:MPMediaItemPropertyIsCloudItem]; isCloud = [isCloudNumber boolValue]; } if (isCloud) { DebugLog(@"Cloud Asset URL: %@", assetURL); } 

这是使用macros来确保只有iOS 6使用iOS 6添加的代码。下面是该macros。

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

尽pipe如此,你仍然无法启动下载。

我刚刚听到苹果关于这个问题的回复(我使用了我的一个技术支持事件)。

据苹果介绍,iOS SDK目前不提供任何API来启动从iCloud下载。 我被指示通过苹果公司的错误记者工具提交此function的增强请求。 我会鼓励别人也这样做。

考虑到iCloud是iOS 5的定义特性之一,苹果真的应该为从iCloud下载audio资产提供编程支持。

这里有一些要注意的事情。 我的应用程序做一个普通的[MPMediaQuery albumsQuery]来收集所有的专辑和他们的歌曲。 即使整个音乐库包含iTunes匹配,其中大部分仍在云中,这也可以正常工作。 但是有一个问题:

如果当时正在播放歌曲,并且如果该歌曲在云中,那么现在正在下载,该专辑中的该歌曲和下一首歌曲从[MPMediaQuery albumsQuery]的结果中缺失 。 这大概是因为这些歌曲是“过境”的:它们都是部分下载的。 (我假设总是下载两首歌曲,这样当第一首完成时,就可以无缝地继续下一首歌了。)

此外,即使库的“目录”实际上没有改变,播放和因此下载歌曲也会触发MPMediaLibraryDidChangeNotification

我没有看到任何解决方法,因为没有其他的方式来查询图书馆。 苹果需要修复系统和API以考虑到iTunes Match的存在。 不幸的是我不明白,他们正在为iOS 5.1工作…