【问题标题】:Detect permission of media library ios检测媒体库ios的权限
【发布时间】:2016-08-19 07:52:35
【问题描述】:

在我的应用程序中,我想检测用户是否授予其媒体库的权限。当系统弹出询问或稍后设置时,用户可能会拒绝媒体库权限。有什么方法可以检测媒体库权限的状态吗?

这是我访问歌曲列表的代码。

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

请参见下面的屏幕截图,用户可以在其中更改媒体库权限。

【问题讨论】:

  • @rptwsthi,请仔细阅读问题,相机胶卷和媒体播放器的许可不一样。
  • 您在问题中提到了媒体库而不是播放器。加上检查应该解决您问题的问题的已接受答案:stackoverflow.com/a/13572568/656600
  • @rptwsthi,请在您的设备中安装任何访问您的媒体库(音乐文件)和相机胶卷的应用程序。然后打开设置你会知道这两个是不同的权限。

标签: ios objective-c swift media-library


【解决方案1】:
-(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 用于访问您的照片和视频,当我运行上面的代码时,它会询问相机胶卷的权限。我的问题是关于媒体库(音乐文件)的权限。
  • 感谢您的帮助,能否请您在 Objective-C 中发布您的代码。
  • @ajay_nasa 我更新了,我没有使用 xcode,所以如果它不能编译,请告诉我
【解决方案2】:

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

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

如果用户拒绝权限,则songArray 对象始终为零,但如果用户允许访问Media Library,则songArray 对象具有歌曲数组。即使设备中没有歌曲但用户授予访问Media Library的权限,也会有0计数的数组。

【讨论】:

    【解决方案3】:

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

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

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

    更多信息请访问Apple Docs

    【讨论】:

    • 伙计,我希望人们能评论为什么他们对解决方案投了反对票。这对我来说看起来不错,现在我不确定这是否可行或问题可能是什么。
    猜你喜欢
    • 2019-02-18
    • 1970-01-01
    • 2017-05-05
    • 2022-12-16
    • 2022-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多