MPMediaLibrary에 권한을 부여(허용되지 않음)
4455 단어 iOSAdventCalendarSwift
폐사에 19신졸로 입사해 반년 강이 지났습니다.
비즈니스에서 PHP를 사용하고 있으며 개인적으로 모바일 앱을 개발하고 있습니다.
자작 앱은 심사 시에 거부된 문제점을 씁니다.
환경
Xcode 11.2
Swift 4.2
IOS 13.2
문제점
Info.plist에서 Privacy- Media Library Usage Description을 설정하면 권한 화면이 나옵니다.
그 화면이 한 번밖에 나오지 않지만 사용자가 허가 없음을 선택하면 앱 내에서 버튼을 눌러도 반응이 없어져 버렸다.
해결책
UIAlertController로 선택 화면을 만들고 설정 화면까지 날린다.
authorizationStatus
설명
.notDetermined
선택되지 않음
.denied
불허
.authorized
허가
음악 선택 버튼을 누를 때
@IBAction func pickMusic(_ sender: Any) {
let status = MPMediaLibrary.authorizationStatus()
//MPMediaLibraryにアクセスできない、選択画面を表示
if status == .denied {
self.displayPermissionViewController()
} else {
let picker = MPMediaPickerController(mediaTypes: MPMediaType.music)
picker.delegate = self
self.present(picker, animated: true, completion: nil)
}
}
선택 화면에서 설정합니다를 누르면
func displayPermissionViewController() {
let alert = UIAlertController(title: "メディアライブラリのアクセス許可を設定しますか?", message: "音楽選択するため", preferredStyle: UIAlertController.Style.alert)
alert.popoverPresentationController?.sourceView = self.view
let cancelAction = UIAlertAction(title: "キャンセル", style: .default, handler: nil)
alert.addAction(cancelAction)
let okAction = UIAlertAction(title: "設定します", style: .default) { _ in
// セッティング画面に行く
if let url = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
}
전체 코드
import UIKit
import MediaPlayer
class ViewController: UIViewController, MPMediaPickerControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func pickMusic(_ sender: Any) {
let status = MPMediaLibrary.authorizationStatus()
//MPMediaLibraryにアクセスできない、選択画面を表示
if status == .denied {
self.displayPermissionViewController()
} else {
let picker = MPMediaPickerController(mediaTypes: MPMediaType.music)
picker.delegate = self
self.present(picker, animated: true, completion: nil)
}
}
func displayPermissionViewController() {
let alert = UIAlertController(title: "メディアライブラリのアクセス許可を設定しますか?", message: "音楽選択するため", preferredStyle: UIAlertController.Style.alert)
alert.popoverPresentationController?.sourceView = self.view
let cancelAction = UIAlertAction(title: "キャンセル", style: .default, handler: nil)
alert.addAction(cancelAction)
let okAction = UIAlertAction(title: "設定します", style: .default) { _ in
// セッティング画面に行く
if let url = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
}
func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) {
dismiss(animated: true, completion: nil)
}
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
musicPlayer.setQueue(with: mediaItemCollection)
musicPlayer.play()
dismiss(animated: true, completion: nil)
}
}
Reference
이 문제에 관하여(MPMediaLibrary에 권한을 부여(허용되지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ricky-yu/items/ca06e4a200258d2ed538텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)