如何检查MPMediaItem的MPMediaType只是音频?

我希望我需要做一个按位比较,但我不清楚如何在Objective-C语法中完成。 MPMediaType的枚举定义如下。

我需要做的是确保MPMediaItem根本不是video,因为尽管使用我的媒体查询过滤到MPMediaTypeAnyAudio,AVAssetReader仍会阻塞video文件。

如何确保MPMediaItem是唯一的音频类型之一?

enum { // audio MPMediaTypeMusic = 1 << 0, MPMediaTypePodcast = 1 << 1, MPMediaTypeAudioBook = 1 << 2, MPMediaTypeAudioITunesU = 1 << 3, // available in iOS 5.0 MPMediaTypeAnyAudio = 0x00ff, // video (available in iOS 5.0) MPMediaTypeMovie = 1 << 8, MPMediaTypeTVShow = 1 << 9, MPMediaTypeVideoPodcast = 1 << 10, MPMediaTypeMusicVideo = 1 << 11, MPMediaTypeVideoITunesU = 1 << 12, MPMediaTypeAnyVideo = 0xff00, MPMediaTypeAny = ~0 }; typedef NSInteger MPMediaType; 

要从音乐库中检索所有音乐曲目,请尝试:

 MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMusic] forProperty:MPMediaItemPropertyMediaType]; MPMediaQuery *query = [[MPMediaQuery alloc] init]; [query addFilterPredicate:predicate]; NSArray *items = [query items]; 

要检索音乐,有声读物和播客:

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

我发现MPMediaTypeAnyAudio上的MPMediaQuery谓词还不够。 所以我改为对媒体类型进行以下检查,这是阻止video内容通过的最佳方法。

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

我发现媒体类型枚举中的实际值具有这些值,这让我可以使用这个简单的整数比较。

 MPMediaTypeMusic: 1 MPMediaTypePodcast: 2 MPMediaTypeAudioBook: 4 MPMediaTypeAudioITunesU: 8 (iOS 5) MPMediaTypeAnyAudio: 255 MPMediaTypeMovie: 256 MPMediaTypeTVShow: 512 MPMediaTypeVideoPodcast: 1024 MPMediaTypeMusicVideo: 2048 MPMediaTypeVideoITunesU: 4096 MPMediaTypeAnyVideo: 65280