UIImagePickerController также не запрашивает разрешение при первом использовании

введите здесь описание изображения

Я попытался установить CFBundleDisplayName и Конфиденциальность — описание использования библиотеки фотографий, но все равно не работает

Но в настройках у него есть разрешение вкл/выкл

Я попытался удалить приложение и установить его снова, но оно никогда не спрашивает разрешения, если оно выключено, оно показывает приведенный выше снимок экрана ... пользователь должен перейти в настройки и включить его.

Итак, как заставить его запрашивать разрешение при первом использовании.

Вот код, который я использую

let imgPicker:UIImagePickerController=UIImagePickerController()
imgPicker.delegate=self
imgPicker.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
imgPicker.mediaTypes=[kUTTypeImage as String,kUTTypeMovie as String]
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(imgPicker, animated: true, completion: nil)

person Durai Amuthan.H    schedule 09.03.2016    source источник
comment
проверьте, как только ваш Bundle Display Name был установлен или нет в Info.plist   -  person Anbu.Karthik    schedule 09.03.2016
comment
@ Anbu.Karthik - я установил, приятель   -  person Durai Amuthan.H    schedule 09.03.2016
comment
см. один раз это stackoverflow.com/questions/20464631 /   -  person Anbu.Karthik    schedule 09.03.2016
comment
Вы звоните PHPhotoLibrary.requestAuthorization куда-нибудь?   -  person Michael    schedule 09.03.2016
comment
@Michael - Нет. Фрагмент кода, который я прикрепил, - это единственное, что я использую, кроме того, что я использую только его методы делегата.   -  person Durai Amuthan.H    schedule 09.03.2016
comment
Я не верю, что удаление/установка вызовет повторный запрос, если вы не измените имя пакета. Вы можете использовать PHPhotoLibrary.authorizationStatus для проверки текущей авторизации.   -  person Michael    schedule 09.03.2016


Ответы (1)


Я только что создал расширение для этого, вы должны просто добавить его в свой код и подключить выход к тому, что когда-либо запускало средство выбора изображений в вашем приложении.

   // MARK: - UIImagePickerControllerDelegate Methods
extension UIViewController:UIImagePickerControllerDelegate, UINavigationControllerDelegate{

@IBAction func newImgTapped(sender: UIButton) {
    let imgPicker = UIImagePickerController()
    imgPicker.delegate = self
    let status = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
    if status == AVAuthorizationStatus.Denied{

        let changeYourSettingsAlert = UIAlertController(title: "You do not have permissions enabled for this.", message: "Would you like to change them in settings?", preferredStyle: .Alert)
        let okAction = UIAlertAction(title: "OK", style: .Default, handler: { (UIAlertAction) -> Void in
            guard let url = NSURL(string: UIApplicationOpenSettingsURLString) else {return}
            UIApplication.sharedApplication().openURL(url)
            print("opensettings")

        })
        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)

        changeYourSettingsAlert.addAction(okAction)
        changeYourSettingsAlert.addAction(cancelAction)
        presentAlert(changeYourSettingsAlert)


    } else {
        let Alert = UIAlertController(title: "Where would you like to get photos from?", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
        Alert.popoverPresentationController?.sourceRect = sender.bounds
        Alert.popoverPresentationController?.sourceView = sender
        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)

        imgPicker.allowsEditing = true
        imgPicker.modalPresentationStyle = UIModalPresentationStyle.Popover
        imgPicker.popoverPresentationController?.sourceView = sender
        imgPicker.popoverPresentationController?.sourceRect = sender.bounds

        presentAlert(Alert)

        let camera = UIAlertAction(title: "Take a Photo", style: .Default) { (camera) -> Void in
            imgPicker.sourceType = .Camera
            self.presentViewController(imgPicker, animated: true, completion: nil)
        }

        let photoLibrary = UIAlertAction(title: "Choose from Library", style: .Default) { (Photolibrary) -> Void in

            imgPicker.sourceType = .PhotoLibrary
            self.presentViewController(imgPicker, animated: true, completion: nil)

        }

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){
            Alert.addAction(camera)
        }
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary){
            Alert.addAction(photoLibrary)
        }
        Alert.addAction(cancelAction)
    }
}

public func presentAlert(sender:UIAlertController){
    presentViewController(sender, animated: false, completion: nil)
}

public func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    dismissViewControllerAnimated(true, completion: nil)
}
}

надеюсь, это поможет.

person Dan Leonard    schedule 09.03.2016