Tur*_*age 29 ipod objective-c core-audio ios icloud
我有一个使用iPod Library API访问iOS中歌曲数据库的应用程序.随着iTunes Match的发布,任何不在设备上的歌曲都将无法加载.有没有办法要求下载这首歌?也许使用新的iCloud API?
编辑: 要明确我不会问如何使用iPhone下载iTunes Match歌曲.iOS SDK允许通过MPMediaQuery/MPMediaItems访问iPod库.在具有iTunes Match功能的iOS设备上,通过MPMediaQuery返回iTunes匹配库中但不在设备本地的歌曲,但MPMediaItems的'exportable'标志设置为false.当我在音乐应用程序中访问这些歌曲时,它们会自动下载.我想通过MPMediaItem触发相同的自动下载.
我已经看到iTunes Match中的项目被视为iCloud的一部分,并且iOS 5 SDK中有一个新的iCloud部分.但据我了解,我只能上传我的应用程序数据.我希望通过MPMediaItem或通过iCloud使用URL来触发iTunes Match下载.
Tur*_*age 15
我找到了一些东西,但它并不好.如果您选择要通过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];
Run Code Online (Sandbox Code Playgroud)
没有关于这是否真的开始下载的反馈,或下载的进展但项目将开始下载,如果您的连接良好,它将在第一次播放(否则您可以垃圾邮件播放,它将开始启动).
小智 7
我刚刚从Apple那里听到了关于这个问题的回复(我使用了一个技术支持事件).
根据Apple的说法,iOS SDK目前不提供用于启动iCloud下载的任何API.我被指示通过Apple的bug报告工具提交此功能的增强请求.我会鼓励其他人也这样做.
考虑到iCloud是iOS 5的定义功能之一,Apple真的应该为从iCloud下载音频资产提供程序化支持.
上面的链接显示了如何使用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);
}
Run Code Online (Sandbox Code Playgroud)
这是使用宏来确保只有iOS 6使用iOS 6中添加的代码.下面是该宏.
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
Run Code Online (Sandbox Code Playgroud)
据我所知,你仍然无法启动下载.