How do I check an MPMediaItem for MPMediaType of just audio?

允我心安 提交于 2019-12-03 14:59:47

To retrieve all the music tracks from the music library, try:

MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMusic] forProperty:MPMediaItemPropertyMediaType];

MPMediaQuery *query = [[MPMediaQuery alloc] init];
[query addFilterPredicate:predicate];

NSArray *items = [query items];

To retrieve music, audio books and podcasts:

MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue [NSNumber numberWithInteger:MPMediaTypeMusic | MPMediaTypePodcast | MPMediaTypeAudioBook] forProperty:MPMediaItemPropertyMediaType comparisonType:MPMediaPredicateComparisonContains];

I found that an MPMediaQuery predicate on MPMediaTypeAnyAudio was not enough. So I instead ran the following check on the media type and it is the best way to prevent video content from coming through.

    NSInteger mediaType = [[aMediaItem valueForProperty:MPMediaItemPropertyMediaType] intValue];
    if (mediaType <= MPMediaTypeAnyAudio) { 
        return TRUE;
    }

I found the actual values from the enum of media types had these values which let me use this simple integer comparison.

MPMediaTypeMusic: 1
MPMediaTypePodcast: 2
MPMediaTypeAudioBook: 4
MPMediaTypeAudioITunesU: 8 (iOS 5)
MPMediaTypeAnyAudio: 255
MPMediaTypeMovie: 256
MPMediaTypeTVShow: 512
MPMediaTypeVideoPodcast: 1024
MPMediaTypeMusicVideo: 2048
MPMediaTypeVideoITunesU: 4096
MPMediaTypeAnyVideo: 65280
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!