iOS获取手机内部音乐列表
主要是通過?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 // 播客標題
}
以上僅為個人理解,理解有誤的地方,請指出,謝謝
如有未理解或想要繼續的探討的朋友可以聯系本人
總結
以上是生活随笔為你收集整理的iOS获取手机内部音乐列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宿主机和docker容器之间的文件拷贝
- 下一篇: 爱奇艺大裁员,互联网的苦日子来了…