Tag: mpmediaquery

当按资产url添加addFilterPredicate时,MPMediaQuery将引发exception

我试图通过使用歌曲url来查询歌曲标题。 url是ipod-library://item/item.mp3?id= format let predicate = MPMediaPropertyPredicate(value:url, forProperty:MPMediaItemPropertyAssetURL, comparisonType:.equalTo) let query = MPMediaQuery.songs(); query.addFilterPredicate(predicate) for song in query.items! { print(song.title) } 碰撞: *** Assertion failure in -[ML3ComparisonPredicate valueToBindForOperation:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/MusicLibrary/MusicLibrary-4015.200.4/MusicLibrary/Framework/Queries/ML3Predicate.m:610 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '' find这个答案,但不明白为什么我应该使用硬编码的数字,如果有一个特定的MPMediaItemPropertyAssetURL

在iPad上没有检测到歌曲

我的应用程序已被拒绝苹果:(报道的问题是 该应用程序不检测iPad上的歌曲。 为了理解这个问题,我已经尝试了所有的testing,但是在我的ipad和我的歌曲上,一切正常。 在我的代码中,我以下面的方式处理空的库的情况: MPMediaQuery *albums = [MPMediaQuery albumsQuery]; NSArray *albumCollections = [albums collections]; if ([albumCollections count] > 0) { // everything fine, let's start } else { // display an UIAlertView warning the user that the library is empty and stop } 现在,苹果给我发了一张屏幕截图,显示UIAlertView总是显示出来,即使他们说在iPad上有歌曲。 可能是什么问题? 即使设备上有歌曲,也许albumCollections可能是空的? 任何帮助非常感谢,我把很多的努力在应用程序,看到它被拒绝的原因,我无法重现是如此沮丧:(

不能下标types的值

我试图执行此代码,以获得用户可以在他们的手机上的所有音乐播放列表。 var queryPlaylists = MPMediaQuery.playlistsQuery() print(queryPlaylists.collections[0]) 但是,当我尝试访问queryPlaylists.collections的任何元素时,我得到一个编译错误: 不能下标[MPMediaItem]types的值。 从上面的数组中,这对我没有任何意义。 另外这个用于xcode 7.0之前的工作。

如何获得MPMediaItem(有声读物)个别章节

我知道我可以从iPod库中获得所有的有声读物: MPMediaPropertyPredicate *abPredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeAudioBook] forProperty:MPMediaItemPropertyMediaType]; MPMediaQuery *abQuery = [[MPMediaQuery alloc] init]; [abQuery addFilterPredicate:abPredicate]; [abQuery setGroupingType:MPMediaGroupingAlbum]; NSArray *books = [abQuery collections]; 我可以通过使用这个获得每本书的部分/文件: [book items]; 我无法弄清楚如何获得构成每个部分的单独章节。 我知道你可以在iPod应用程序中看到这一点,通过点击右上angular的“轨道”button,同时玩一本书。 这会翻转玩家并显示章节列表。 是苹果使用私人API来得到这个?

检测设备上的iTunes播放列表文件夹

通过iTunes,您可以创build任意嵌套的播放列表文件夹。 当您将这些播放列表文件夹复制到iOS设备时,iTunes能够检测到它们是文件夹,并允许您深入到最终获取歌曲的位置。 任何想法他们怎么做? 我一直在想这个好几天。 当我查询一个已知文件夹的特定persistentID时,我可以看到的与包含歌曲的播放列表不同的是: playlist.mediaTypes = 4359(这是Music | Podcast | Audiobook | Movie | VideoiTunes),而正常的播放列表不会混合audiotypes和videotypes 属性MPMediaPlaylistPropertyPlaylistAttributes的值包含2(MPMediaPlaylistAttributeSmart),而普通播放列表包含0 项目数量将等于设备上的项目总数 但是,就是这样! 我没有看到任何方式来获取子文件夹。 或者,在询问包含在文件夹中的播放列表或子文件夹时,我没有看到将其绑定到父文件夹的方法。 苹果在iTunes上做,所以一定有办法。 他们是否使用一些私人API?

检索iOS中上次播放时间sorting的歌曲列表

我需要从iOS设备获取N个最近播放的歌曲的列表。 目前唯一可以设想的方法是通过MPMediaQuery获取所有歌曲,并通过MPMediaQuery手动sorting。 这是一个潜在的昂贵的操作,我想知道是否有更好的方法。 编辑:经过一些testing,这是一个非常昂贵的操作。 在2500首歌曲的testing库中,花了大约20秒的时间: 得到所有的歌曲。 为所有从未播放的歌曲(1970年1月1日)分配一个date。 按datesorting。 取前N个条目。 任何改进build议,将不胜感激。 编辑2:现在解决,但只是为了logging这里是我在做什么。 我正在使用如下所述的块进行sorting: https : //stackoverflow.com/a/805589/112702 。 只要将分类方法改变为Bryan的答案,iPod Touch 3的速度就提高了近20倍。

以编程方式从iPhone应用程序访问设备音乐文件

我想要访问iPhone上可用的音乐文件并将其列出(或)将文件导入到我的iPhone应用程序中,并开始播放。 可以做到吗? 类似于我们如何使用UIImagePickerController委托方法从设备相册访问图像。 谢谢!

MPMediaQuerysearch艺术家,专辑和歌曲

如何以与iOS音乐应用程序相同的方式searchiPod库? 我想进行一般查询,返回每个艺术家,专辑和歌曲的结果。 例如,如果我searchKenny Chesney,我希望歌曲查询返回所有Kenny Chesney歌曲(以及任何包含Kenny Chesney的歌曲标题或专辑)。当我为每个属性(歌曲标题,专辑标题,艺术家的名字),一个空数组返回。 下面是一些代码,可以让你更好地了解我正在尝试完成的任务: MPMediaPropertyPredicate *songPredicate = [MPMediaPropertyPredicate predicateWithValue:searchText forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonContains]; MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue:searchText forProperty:MPMediaItemPropertyAlbumTitle comparisonType:MPMediaPredicateComparisonContains]; MPMediaPropertyPredicate *artistPredicate = [MPMediaPropertyPredicate predicateWithValue:searchText forProperty:MPMediaItemPropertyArtist comparisonType:MPMediaPredicateComparisonContains]; MPMediaQuery *songsQuery = [MPMediaQuery songsQuery]; [songsQuery addFilterPredicate:songNamePredicate]; [songsQuery addFilterPredicate:artistNamePredicate]; [songsQuery addFilterPredicate:albumNamePredicate]; NSLog(@"%@", [songsQuery items]); 我有这个工作,通过与每个谓词分别运行查询,但这似乎是非常低效的!