在Swift 3中检查MPMediaLibrary的授权

问题描述 投票:1回答:2

我使用以下代码检查MPMediaLibrary授权:

func handlePermissions() {
    let permissionStatus = MPMediaLibrary.authorizationStatus()
    switch (permissionStatus) {
    case MPMediaLibraryAuthorizationStatus.authorized:
        print("permission status is authorized")
    case MPMediaLibraryAuthorizationStatus.notDetermined:
        print("permission status is not determined")
        MPMediaLibrary.requestAuthorization(MPMediaLibraryAuthorizationStatus -> permissionStatus)
    case MPMediaLibraryAuthorizationStatus.denied:
        print("permission status is denied")
    case MPMediaLibraryAuthorizationStatus.restricted:
        print("permission status is restricted")
    }
 }

最终,我试图在调用查询之前提示用户授权(在启动时)...通过案例MPMediaLibraryAuthorizationStatus.notDetermined:。上面的代码产生错误:' - >'后的预期类型。当requestAuthorization()行被注释掉时,应用程序在启动时崩溃(访问权限未被授权),并且在启动屏幕消失后显示授权提示视图。

我已经看到了一些如何在Objective C中执行requestAuthorization()的例子,但在Swift中没有。我不明白:

 MPMediaLibrary.requestAuthorization( handler: (MPMediaLibraryAuthorizationStatus) -> Void )

在Swift 3中请求授权访问MPMediaLibrary的正确方法是什么?

authorization swift3 ios10 mpmusicplayercontroller mpmedialibrary
2个回答
1
投票

您实际上已经使用了requestAuthorization方法的原型。您需要根据自己的需要进行调整。

MPMediaLibrary.requestAuthorization( handler: (MPMediaLibraryAuthorizationStatus) -> Void )

表示requestAuthorization将函数作为参数,此函数将MPMediaLibraryAuthorizationStatus作为参数返回任何内容。

例如,如果我想请求授权,然后在我的控制台中显示结果。我首先检查申请是否尚未获得授权:

if authoriationStatus != .authorized {
        MPMediaLibrary.requestAuthorization({
            (status) in
            switch status {
            case .notDetermined:
                print("notDetermined")
            case .denied:
                print("denied")
            case .restricted:
                print("restricted")
            case .authorized:
                print("authorized")
            }
        })
    }

如您所见,我使用函数作为方法requestAuthorization的参数。该函数在{...}中描述。它被称为闭包,它总是在Swift中使用。


0
投票

对于swift 4.2来检查MPMediaLibrary的授权

import MediaPlayer

let status = MPMediaLibrary.authorizationStatus()
        switch status {
        case .authorized:
            self.openMusicLibrary()
            break
        case .notDetermined:
            MPMediaLibrary.requestAuthorization() { status in
                if status == .authorized {
                    DispatchQueue.main.async {
                        self.openMusicLibrary()
                    }
                }
            }
            break
        case .denied:
            //show alert
            print("Please Allow Access to the Media & Apple Music from appliction setting.")
            break
        case .restricted:
            break
        }
© www.soinside.com 2019 - 2024. All rights reserved.