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 的正确方法是什么?

4

2 回答 2

2

对于 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
        }
于 2019-02-18T10:09:06.937 回答
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 中经常使用的东西。

于 2017-03-22T23:43:56.443 回答