检测iOS媒体库权限

11

在我的应用程序中,我想检测用户是否允许访问他的媒体库。当系统弹出窗口询问或稍后从设置中拒绝媒体库权限时,用户可能会拒绝。有没有办法检测媒体库权限的状态?

以下是我的代码,用于访问歌曲列表。

MPMediaQuery *everything = [MPMediaQuery songsQuery];
NSArray *songArray = [everything items];
请查看下面的屏幕截图,用户可以更改媒体库权限。

enter image description here


可能是询问访问相机胶卷的权限的重复问题。 - rptwsthi
2
@rptwsthi,请仔细阅读问题,相册访问权限和媒体播放器权限不同。 - ajay_nasa
你在问题中提到了媒体库而不是播放器。另外,请检查已接受的答案,它应该可以解决你的问题:https://dev59.com/7mYr5IYBdhLWcg3wka9M#13572568 - rptwsthi
1
@rptwsthi,请在您的设备上安装任何可以访问您的媒体库(音乐文件)和相机胶卷的应用程序。然后打开设置,您将了解这两个权限是不同的。 - ajay_nasa
3个回答

21
-(void) checkMediaLibraryPermissions {
    [MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status){
        switch (status) {
            case MPMediaLibraryAuthorizationStatusNotDetermined: {
                // not determined
                break;
            }
            case MPMediaLibraryAuthorizationStatusRestricted: {
                // restricted
                break;
            }
            case MPMediaLibraryAuthorizationStatusDenied: {
                // denied
                break;
            }
            case MPMediaLibraryAuthorizationStatusAuthorized: {
                // authorized
                break;
            }
            default: {
                break;
            }
        }
    }];
}

ALAssetsLibrary 用于访问您的照片和视频。当我运行上述代码时,它会要求访问相册的权限。我的问题是关于访问媒体库(音乐文件)的权限。 - ajay_nasa
谢谢您的帮助,请问能否用Objective-C发布您的代码。 - ajay_nasa
@ajay_nasa 我更新了,我没有使用Xcode,如果它不能编译,请告诉我。 - Marco Santarossa

3

暂时,我通过检查下面代码中的songArray对象解决了我的问题。

MPMediaQuery *everything = [MPMediaQuery songsQuery]; 
NSArray *songArray = [everything items];

如果用户拒绝了权限,则songArray对象始终为空,但如果用户允许访问媒体库,则songArray对象具有歌曲数组。即使设备中没有歌曲,但用户允许访问媒体库,也会有一个计数为0的数组。

1

Swift 4 访问检查。简单的解决方案如下,您可以更改以包括其他替代方案,但在我的情况下,要么全部访问,要么没有。

private func checkPermissionForMusic() -> Bool {
    switch MPMediaLibrary.authorizationStatus() {
    case .authorized:
        return true
    default:
        return false
    }
}

关于使用上述解决方案的注意事项 - 它们作为块语句执行,不会在同一线程上返回值(return truereturn "authorised"); 结果在后台线程上处理。如果您决定使用上面的建议,请使用处理程序(调用另一个函数)来处理您期望的结果。另一方面,此解决方案立即告诉您是否具有访问权限。无需等待。

更多信息请参见Apple Docs


1
我希望人们能够评论为什么他们会投票反对一个解决方案。这个看起来很好,但现在我不确定它是否有效或者问题出在哪里。 - TheJeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接