iOS获取手机内部音乐列表
2016-05-04 16:52
495 查看
主要是通过 MPMediaQuery 来获取系统的音乐列表
下面讲解这个类的一些属性和方法
1.首先说一下MPMediaPredicate这个类,
这个类可以用来过滤我们不想要的一些音乐
MPMediaPredicate 这个类的定义如图:
并没有定义属性和方法,应该是苹果预留的,为了以后能用在其他的过滤里面
但是我们可以使用它的子类 MPMediaPropertyPredicate
这是MPMediaPropertyPredicate 的 实例化方法
+ (MPMediaPropertyPredicate *)predicateWithValue:(nullable id)value forProperty:(NSString *)property comparisonType:(MPMediaPredicateComparison)comparisonType;
这个方法是过滤属性 property ,过滤的方法是进行比较 value 是否相等
比较的类型comparisonType
比较的类型有两种:
MPMediaPredicateComparisonEqualTo,
第一个:MPMediaPredicateComparisonEqualTo 是比较两个是否相等,如 字符串的 isEqualToString
第二个:MPMediaPredicateComparisonContains 是检测是否包含
OK! MPMediaPropertyPredicate 理解完之后,下面继续
2.MPMediaQuery
下面一个个的讲解方法:
// 1. 这个是MPMediaQuery 的初始化方法,可以传入一个过滤的类MPMediaPredicate来过滤我们不想要的item
- (instancetype)initWithFilterPredicates:(nullableNSSet<MPMediaPredicate *> *)filterPredicatesNS_DESIGNATED_INITIALIZER;
// 2. 这个可以设置多个过滤条件
@property (nonatomic,strong,nullable)NSSet<MPMediaPredicate
*> *filterPredicates;
// 3. 添加一个过滤条件
- (void)addFilterPredicate:(MPMediaPredicate *)predicate;
// 4. 移除一个过滤条件
- (void)removeFilterPredicate:(MPMediaPredicate *)predicate;
// 5. 返回一个通过 过滤条件过滤之后 的 存放MPMediaItems 类型的数组,如果没有item 匹配到,会返回一个空数组,如果在查找期间出错的话也有可能会返回一个nil,
// 这个item 数组就是我们想要的 音乐列表
// Returns an array of MPMediaItems matching the query filter predicates.
// If no items match this method returns an empty array, otherwise returns nil if an error prevents the items from being fetched.
@property (nonatomic,readonly,nullable)NSArray<MPMediaItem
*> *items;
// 6. 返回一个指定组类型(groupingType)的数组,数组里面存放 MPMediaItemCollection 类型
// MPMediaItemCollection 类型可以看做是 item 的集合 通过 [MPMediaItemCollection items] 获得
// 例如,我们设置groupingType为
MPMediaGroupingArtist 艺术家类型
// 那么返回的数组里面
第一个(MPMediaItemCollection)是 :刘德华的所有歌曲(MPMediaItem)的集合,
可以通过 [MPMediaItemCollection items] 获得刘德华的所有歌曲
第二个是小沈阳的歌曲集合
。。。。。。。
// Returns an array of MPMediaItemCollections matching the query filter predicates. The collections are grouped by the groupingType.
@property (nonatomic,readonly,nullable)NSArray<MPMediaItemCollection
*> *collections;
// 7. 指定的组类型 组类型下面有介绍
// The property used to group collections, defaults to MPMediaGroupingTitle.
@property (nonatomic)MPMediaGrouping groupingType
// 7 同上
@property (nonatomic,readonly,nullable)NSArray<MPMediaQuerySection
*> *itemSectionsNS_AVAILABLE_IOS(4_2);
@property (nonatomic,readonly,nullable)NSArray<MPMediaQuerySection
*> *collectionSectionsNS_AVAILABLE_IOS(4_2);
// 8. 通过类方法直接获得我们想要的media 队列
// Base queries which can be used directly or as the basis for custom queries.
// The groupingType for these queries is preset to the appropriate type for the query.
+ (MPMediaQuery *)albumsQuery;
+ (MPMediaQuery *)artistsQuery;
+ (MPMediaQuery *)songsQuery;
+ (MPMediaQuery *)playlistsQuery;
+ (MPMediaQuery *)podcastsQuery;
+ (MPMediaQuery *)audiobooksQuery;
+ (MPMediaQuery *)compilationsQuery;
+ (MPMediaQuery *)composersQuery;
+ (MPMediaQuery *)genresQuery;
3. 使用
获取到了MPMediaQuery,便可以或得到 items (MPMediaItem),
在通过MPMediaItem 的属性方法就可以获得具体 MPMediaItem
的一些属性(如:播放本地连接)
当然也可以通过
- (id) valueForProperty: (NSString *) property的方法获得
列举几个
@property (nonatomic, readonly) MPMediaType mediaType // 媒体类型 如 MP3
@property (nonatomic, readonly, nullable) NSString *title// 标题
NSString * const MPMediaItemPropertyAssetURL
@property (nonatomic, readonly, nullable) NSURL *assetURL// 播放URL
NSString * const MPMediaItemPropertyPlayCount
@property (nonatomic, readonly) NSUInteger playCount// 播放次数
NSString * const MPMediaItemPropertyLastPlayedDate
@property (nonatomic, readonly, nullable) NSDate *lastPlayedDate // 最后一次播放的时间
// MPMediaGrouping
typedef NS_ENUM(NSInteger, MPMediaGrouping) {
MPMediaGroupingTitle, // 标题
MPMediaGroupingAlbum,// 唱片集
MPMediaGroupingArtist, // 艺术家
MPMediaGroupingAlbumArtist, // 唱片集艺术家
MPMediaGroupingComposer, // 作曲家
MPMediaGroupingGenre, // 类型流派
MPMediaGroupingPlaylist, // 播放列表
MPMediaGroupingPodcastTitle // 播客标题
}
以上仅为个人理解,理解有误的地方,请指出,谢谢
如有未理解或想要继续的探讨的朋友可以联系本人
下面讲解这个类的一些属性和方法
1.首先说一下MPMediaPredicate这个类,
这个类可以用来过滤我们不想要的一些音乐
MPMediaPredicate 这个类的定义如图:
并没有定义属性和方法,应该是苹果预留的,为了以后能用在其他的过滤里面
但是我们可以使用它的子类 MPMediaPropertyPredicate
这是MPMediaPropertyPredicate 的 实例化方法
+ (MPMediaPropertyPredicate *)predicateWithValue:(nullable id)value forProperty:(NSString *)property comparisonType:(MPMediaPredicateComparison)comparisonType;
这个方法是过滤属性 property ,过滤的方法是进行比较 value 是否相等
比较的类型comparisonType
比较的类型有两种:
MPMediaPredicateComparisonEqualTo,
第一个:MPMediaPredicateComparisonEqualTo 是比较两个是否相等,如 字符串的 isEqualToString
第二个:MPMediaPredicateComparisonContains 是检测是否包含
OK! MPMediaPropertyPredicate 理解完之后,下面继续
2.MPMediaQuery
下面一个个的讲解方法:
// 1. 这个是MPMediaQuery 的初始化方法,可以传入一个过滤的类MPMediaPredicate来过滤我们不想要的item
- (instancetype)initWithFilterPredicates:(nullableNSSet<MPMediaPredicate *> *)filterPredicatesNS_DESIGNATED_INITIALIZER;
// 2. 这个可以设置多个过滤条件
@property (nonatomic,strong,nullable)NSSet<MPMediaPredicate
*> *filterPredicates;
// 3. 添加一个过滤条件
- (void)addFilterPredicate:(MPMediaPredicate *)predicate;
// 4. 移除一个过滤条件
- (void)removeFilterPredicate:(MPMediaPredicate *)predicate;
// 5. 返回一个通过 过滤条件过滤之后 的 存放MPMediaItems 类型的数组,如果没有item 匹配到,会返回一个空数组,如果在查找期间出错的话也有可能会返回一个nil,
// 这个item 数组就是我们想要的 音乐列表
// Returns an array of MPMediaItems matching the query filter predicates.
// If no items match this method returns an empty array, otherwise returns nil if an error prevents the items from being fetched.
@property (nonatomic,readonly,nullable)NSArray<MPMediaItem
*> *items;
// 6. 返回一个指定组类型(groupingType)的数组,数组里面存放 MPMediaItemCollection 类型
// MPMediaItemCollection 类型可以看做是 item 的集合 通过 [MPMediaItemCollection items] 获得
// 例如,我们设置groupingType为
MPMediaGroupingArtist 艺术家类型
// 那么返回的数组里面
第一个(MPMediaItemCollection)是 :刘德华的所有歌曲(MPMediaItem)的集合,
可以通过 [MPMediaItemCollection items] 获得刘德华的所有歌曲
第二个是小沈阳的歌曲集合
。。。。。。。
// Returns an array of MPMediaItemCollections matching the query filter predicates. The collections are grouped by the groupingType.
@property (nonatomic,readonly,nullable)NSArray<MPMediaItemCollection
*> *collections;
// 7. 指定的组类型 组类型下面有介绍
// The property used to group collections, defaults to MPMediaGroupingTitle.
@property (nonatomic)MPMediaGrouping groupingType
// 7 同上
@property (nonatomic,readonly,nullable)NSArray<MPMediaQuerySection
*> *itemSectionsNS_AVAILABLE_IOS(4_2);
@property (nonatomic,readonly,nullable)NSArray<MPMediaQuerySection
*> *collectionSectionsNS_AVAILABLE_IOS(4_2);
// 8. 通过类方法直接获得我们想要的media 队列
// Base queries which can be used directly or as the basis for custom queries.
// The groupingType for these queries is preset to the appropriate type for the query.
+ (MPMediaQuery *)albumsQuery;
+ (MPMediaQuery *)artistsQuery;
+ (MPMediaQuery *)songsQuery;
+ (MPMediaQuery *)playlistsQuery;
+ (MPMediaQuery *)podcastsQuery;
+ (MPMediaQuery *)audiobooksQuery;
+ (MPMediaQuery *)compilationsQuery;
+ (MPMediaQuery *)composersQuery;
+ (MPMediaQuery *)genresQuery;
3. 使用
获取到了MPMediaQuery,便可以或得到 items (MPMediaItem),
在通过MPMediaItem 的属性方法就可以获得具体 MPMediaItem
的一些属性(如:播放本地连接)
当然也可以通过
- (id) valueForProperty: (NSString *) property的方法获得
列举几个
@property (nonatomic, readonly) MPMediaType mediaType // 媒体类型 如 MP3
@property (nonatomic, readonly, nullable) NSString *title// 标题
NSString * const MPMediaItemPropertyAssetURL
@property (nonatomic, readonly, nullable) NSURL *assetURL// 播放URL
NSString * const MPMediaItemPropertyPlayCount
@property (nonatomic, readonly) NSUInteger playCount// 播放次数
NSString * const MPMediaItemPropertyLastPlayedDate
@property (nonatomic, readonly, nullable) NSDate *lastPlayedDate // 最后一次播放的时间
// MPMediaGrouping
typedef NS_ENUM(NSInteger, MPMediaGrouping) {
MPMediaGroupingTitle, // 标题
MPMediaGroupingAlbum,// 唱片集
MPMediaGroupingArtist, // 艺术家
MPMediaGroupingAlbumArtist, // 唱片集艺术家
MPMediaGroupingComposer, // 作曲家
MPMediaGroupingGenre, // 类型流派
MPMediaGroupingPlaylist, // 播放列表
MPMediaGroupingPodcastTitle // 播客标题
}
以上仅为个人理解,理解有误的地方,请指出,谢谢
如有未理解或想要继续的探讨的朋友可以联系本人
相关文章推荐
- 如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库
- iOS获取相册视频文件封面图 选取手机中的音频、视频文件并导出数据。
- iOS各种调试技巧
- ios 命令行打印视图结构命令
- 关于ios推送的教程
- iOS开发——国际化支持Localizable.strings
- iOS 推送,当接到推送消息时如何处理?
- iOS常见问题
- ios9 新特性
- iOS开发系列--通知与消息机制
- iOS 开发隐藏导航栏代码
- iOS 汉字转拼音
- iOS真机调试
- iOS客户端 Openfire服务 利用XEP-0065和XEP-0096 做out-of-band bytestream文件传输
- iOS绘图教程
- Nagios--运维监控软件--简易安装与配置(已经在信工服务器实现)
- runtime-ios
- ios、安卓和后台之间的统一加密方式(DES3加密)
- 让iOS工程目录和文件夹保持一致的工具:synx介绍
- 让iOS工程目录和文件夹保持一致的工具:synx介绍