1,音乐库访问权限
有两种方式:
//直接获取权限,如果没有弹出过系统的提示框,这里是不会弹出提示框的
MPMediaLibraryAuthorizationStatus status = [MPMediaLibrary authorizationStatus];
//这种方式会,如果没有弹出过系统的提示框,这里会弹出提示框,如果弹出过了不会再弹出
[MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status) {
}];
注意第一次要获取音乐的权限和数据时,要通过block的形式返回数据。因为如果没有弹出过系统的权限提示框,直接去请求数据,会弹出提示框,但提示框不是同步的,是异步的,数据已经返回了空。
//如果没有调用requestAuthorization:,直接调用下面的代码,会弹出提示框"XXX Would Like to Access Apple Music And Your Media Library",但是在点击之前数据就反回了
MPMediaQuery *allmp3 = [[MPMediaQuery alloc] init];
MPMediaPropertyPredicate *albumNamePredicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic] forProperty: MPMediaItemPropertyMediaType];
[allmp3 addFilterPredicate:albumNamePredicate];
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (MPMediaItem *song in [allmp3 items]) {
// NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
NSString *songTitle = song.title;
NSLog (@"%@, %@, %@", songTitle, song.assetURL,song.artist);
if (song.title.length && song.assetURL) {
[arr addObject:song];
}
}
所以,在获取数据前需要通过下列方式获取权限:
[MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status) {
if(MPMediaLibraryAuthorizationStatusAuthorized == status) {
MPMediaQuery *allmp3 = [[MPMediaQuery alloc] init];
MPMediaPropertyPredicate *albumNamePredicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic] forProperty: MPMediaItemPropertyMediaType];
[allmp3 addFilterPredicate:albumNamePredicate];
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (MPMediaItem *song in [allmp3 items]) {
// NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
NSString *songTitle = song.title;
NSLog (@"%@, %@, %@", songTitle, song.assetURL,song.artist);
if (song.title.length && song.assetURL) {
[arr addObject:song];
}
}
}
block(arr); //block返回数据
}];
这样数据的返回形式需要用block方式返回。
另一种方式是进入引用后就去请求权限,在使用的地方直接判断是否有权限即可。
//appDelegate中启动就获取权限
[MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status) {
}];
//在获取数据前,判断权限
MPMediaLibraryAuthorizationStatus status = [MPMediaLibrary authorizationStatus];
网友评论