访问ipod音乐库并显示长度的声音列表

时间:2011-06-19 11:22:08

标签: iphone uilocalnotification mpmediapickercontroller

我正在尝试访问iPod音乐库,然后在我的应用程序处于后台时创建本地通知。我想在本地通知中播放选定的声音。我的问题是Apple只允许那些小于30秒的文件。长度。

那么有没有办法获得那些长度小于30秒的声音列表?

如果我得到这个列表,那么我需要在我的资源包中复制选定的媒体文件。 然后我可以将它放到我当地的通知中。直到并且除非有任何方法将媒体项目直接用于本地通知。

感谢所有人的帮助..

1 个答案:

答案 0 :(得分:0)

假设您只想要“音乐”下的项目(不是播客或铃声),这样的话应该有效:

MPMediaQuery * query = [MPMediaQuery songsQuery];
NSArray * items = [query items];
NSPredicate * predicate = [NSPredicate predicateWithBlock:
   ^(id evaluatedObject, NSDictionary *bindings){
     MPMediaItem * item = evaluatedObject;
     NSNumber * duration = [item valueForProperty:MPMediaItemPropertyPlaybackDuration];
     return [duration doubleValue] < 30;
   }];
NSArray * filteredItems = [items filteredArrayUsingPredicate:predicate];

不幸的是MPMediaPropertyPredicate不允许我们过滤“持续时间少于30秒”(比较类型为“EqualTo”和“Contains”),所以我们在上面手动完成。

然后,您需要使用AVAssetExportSession导出所需的曲目。您可能需要将其转换为Local and Push Notification Programming Guide中支持的格式之一。我还建议使用固定的文件名,以便更容易跟踪您创建的文件。

最后,您无法写入您的应用程序包,因为这会使代码签名无效(显然您曾经能够这样做;可能只在安装时检查签名)。但是,您可能能够使用../Library/Application Support/MyApp/MySound.mp4之类的相对路径。

请注意,这不保证可以正常运行,并且可能无法通过应用审核!特别是

  • 无法保证路径将以../Library开头。用于生成相对路径的算法超出了本答案的范围。 (绝对路径可能无效,因为它不适用于-[NSString stringByAppendingPathComponent:]。)
  • 无法保证UILocalNotification.soundName会接受路径;文档只是说它接受应用程序主包中的声音资源的“文件名(包括扩展名)”。