我使用以下代码检查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的正确方法是什么?
您实际上已经使用了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中使用。
对于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
}