我正在尝试访问 iPod 音乐库,然后在我的应用程序处于后台时创建本地通知。我想在本地通知中播放选定的声音。我的问题是 Apple 只允许那些少于 30 秒的文件。长度。
那么有没有办法只列出那些长度小于 30 秒的声音?
如果我得到这个列表,那么我需要将选定的媒体文件复制到我的资源包中。然后我可以将它发送到我的本地通知。直到和除非有任何方法可以将媒体项目直接发送到本地通知。
感谢大家的帮助。。
我正在尝试访问 iPod 音乐库,然后在我的应用程序处于后台时创建本地通知。我想在本地通知中播放选定的声音。我的问题是 Apple 只允许那些少于 30 秒的文件。长度。
那么有没有办法只列出那些长度小于 30 秒的声音?
如果我得到这个列表,那么我需要将选定的媒体文件复制到我的资源包中。然后我可以将它发送到我的本地通知。直到和除非有任何方法可以将媒体项目直接发送到本地通知。
感谢大家的帮助。。
假设您只想要“音乐”下的项目(而不是播客或铃声),这样的事情应该可以工作:
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
,我们不能通过“duration less than 30 seconds”(比较类型是“EqualTo”和“Contains”)进行过滤,所以我们在上面手动进行。
然后您需要使用导出所需的曲目AVAssetExportSession
。您可能需要将其转换为Local and Push Notification Programming Guide中支持的格式之一。我还建议使用固定的文件名,以便更轻松地跟踪您创建的文件。
最后,您不能写入您的应用程序包,因为这会使代码签名无效(显然您曾经能够这样做;也许签名仅在安装时检查)。但是,您也许可以使用相对路径,例如../Library/Application Support/MyApp/MySound.mp4
.
请注意,这不能保证有效,并且可能无法通过应用审核!尤其,
../Library
. 生成相对路径的算法超出了这个答案的范围。(绝对路径可能不起作用,因为它不适用于-[NSString stringByAppendingPathComponent:]
.)UILocalNotification.soundName
会接受路径;文档只是说它接受“应用程序主包中声音资源的文件名(包括扩展名)”。