UIImagePickerController没有请求权限

时间:2018-02-16 11:43:58

标签: ios swift uiimagepickercontroller info.plist

我在应用中实现了以下代码,以允许用户将图像添加到应用中。但是,永远不会要求用户访问照片的权限。我在这里缺少什么?

在我的info.plist中我设置了: 隐私 - 照片库使用说明=请提供对照片库的访问

包标识符是: $(PRODUCT_BUNDLE_IDENTIFIER)

import UIKit

class NewPostXIB: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var image: UIImageView!

let imagePicker = UIImagePickerController()

override func viewDidLoad() {
    super.viewDidLoad()
    imagePicker.delegate = self
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    self.view.endEditing(true)
}

@IBAction func closeButton(_ sender: Any) {
    dismiss(animated: false, completion: nil)
}

@IBAction func addImageButton(_ sender: Any) {
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        imagePicker.allowsEditing = true
        imagePicker.sourceType = .photoLibrary
        present(imagePicker, animated: true, completion: nil)
        }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
        image.contentMode = .scaleAspectFill
        image.image = pickedImage
    }
    dismiss(animated: false, completion: nil)
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

3 个答案:

答案 0 :(得分:3)

添加以下功能解决了问题:

 func checkPermission() {
    let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
    switch photoAuthorizationStatus {
    case .authorized:
        present(imagePicker, animated: true, completion: nil)
        print("Access is granted by user")
    case .notDetermined:
        PHPhotoLibrary.requestAuthorization({
            (newStatus) in
            print("status is \(newStatus)")
            if newStatus ==  PHAuthorizationStatus.authorized {
                /* do stuff here */
                self.present(self.imagePicker, animated: true, completion: nil)
                print("success")
            }
        })
        print("It is not determined until now")
    case .restricted:
        // same same
        print("User do not have access to photo album.")
    case .denied:
        // same same
        print("User has denied the permission.")
    }
}

答案 1 :(得分:2)

根据apple documentation

注意

使用UIImagePickerController调出用户的照片时 库,则您的应用无需明确请求权限。

照片会在需要时自动提示用户请求授权。

答案 2 :(得分:0)

答案很简单:这是从iOS 11开始的正常行为,因为UIImagePickerController在单独的进程中运行,因此对于只读访问权限,您不需要任何特殊权限。