我正在尝试访问iPod音乐库,然后在我的应用程序处于后台时创建本地通知。我想在本地通知中播放选定的声音。我的问题是Apple只允许那些小于30秒的文件。长度。
那么有没有办法获得那些长度小于30秒的声音列表?
如果我得到这个列表,那么我需要在我的资源包中复制选定的媒体文件。 然后我可以将它放到我当地的通知中。直到并且除非有任何方法将媒体项目直接用于本地通知。
感谢所有人的帮助..
答案 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
会接受路径;文档只是说它接受应用程序主包中的声音资源的“文件名(包括扩展名)”。