Благодаря новой функциональности в iOS 8, если вы используете камеру в приложении, она запросит разрешение на доступ к камере, а затем, когда вы попытаетесь повторно сделать снимок, запросит разрешение на доступ к библиотеке фотографий. В следующий раз, когда я запускаю приложение, я хочу проверить, есть ли у камеры и библиотеки фотографий права доступа к нему.
Для камеры проверяю
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}
Я ищу нечто подобное для библиотеки фотографий.
ios
ios8
phphotolibrary
tech_human
источник
источник
Я знаю, что на это уже был дан ответ, но просто чтобы расширить ответ @Tim, вот код, который вам нужен (iOS 8 и выше):
Не забывай
#import <Photos/Photos.h>
Если вы используете Swift 3.0 или выше, вы можете использовать следующий код:
Не забывай
import Photos
источник
В качестве формальности версия Swift 2.X :
И Swift 3 / Swift 4 :
источник
import Photos
, если вы хотите использовать PHPhotoLibraryВот полное руководство для iOS 8+ (без ALAssetLibrary):
Во-первых, мы должны предоставить описание использования, поскольку теперь это требуется PHPhotoLibrary.
Для этого мы должны открыть
info.plist
файл, найти ключPrivacy - Photo Library Usage Description
и указать для него значение. Если ключа не существует, просто создайте его.Вот изображение, например:
Также убедитесь, что значение ключа
Bundle name
не пусто вinfo.plist
файле.Теперь, когда у нас есть описание, мы обычно можем запросить авторизацию, вызвав
requestAuthorization
метод:ПРИМЕЧАНИЕ 1: на
requestAuthorization
самом деле оповещение не отображается при каждом вызове. Он отображается один раз в какое-то время, сохраняет ответ пользователя и возвращает его каждый раз вместо того, чтобы снова показывать предупреждение. Но поскольку это не то, что нам нужно, вот полезный код, который всегда показывает предупреждение каждый раз, когда нам нужно разрешение (с перенаправлением на настройки):Распространенная проблема 1. Некоторые пользователи жалуются, что приложение не отображает предупреждение после внесения вышеупомянутых изменений в
info.plist
файл.Решение: для тестирования попробуйте перейти
Bundle Identifier
с файла проекта на что-то другое, очистить и пересобрать приложение. Если заработало то все нормально, переименуйте обратно.Распространенная проблема 2: существует конкретный случай, когда результаты выборки не обновляются (и представления, которые использовали изображения из этих запросов на выборку, по-прежнему пусты), когда приложение получает разрешения на фотографии во время работы, как было обещано в документации.
На самом деле это происходит, когда мы используем НЕПРАВИЛЬНЫЙ код, например:
В этом случае, если пользователь отказался предоставлять разрешения,
viewDidLoad
затем перешел к настройкам, разрешил и перешел обратно в приложение, представления не будут обновлены, потому что[self reloadCollectionView]
запросы на выборку не были отправлены.Решение: нам просто нужно позвонить
[self reloadCollectionView]
и выполнить другие запросы на выборку, прежде чем запрашивать авторизацию, например:источник
У меня так получилось:
И я отправляю то, что мне нужно сделать, как блок в зависимости от успеха или неудачи.
источник
ОБНОВЛЕНИЕ для: SWIFT 3 IOS10
Примечание: импортируйте фотографии в AppDelegate.swift следующим образом
// AppDelegate.swift
импорт UIKit
импорт фотографий
...
Ответ обновлен от Элвина Джорджа
источник
Использование ALAssetsLibrary должно работать:
источник
источник
iOS 14 и более поздние версии Apple добавила новую функцию, которая предоставит ограниченный доступ к библиотеке фотографий. В зависимости от ваших требований (пример создания настраиваемой фотогалереи) вы должны проверить, предоставил ли пользователь только ограниченный доступ и хочет ли предоставить полный доступ.
Для обратной совместимости старые версии без параметра возвращают .authorized даже при ограниченном доступе.
Swift 5 :
Есть код для повторного вызова экрана ограниченного доступа. если пользователь предоставил только .ограниченный доступ, и вы хотите, чтобы пользователь снова выбирал изображения.
При каждом перезапуске приложения iOS будет показывать предупреждение, чтобы уведомить пользователя об ограниченном доступе. Если вы хотите остановить это предупреждение, добавьте
PHPhotoLibraryPreventAutomaticLimitedAccessAlert
ДА в Info.plistисточник
Вот небольшой и простой фрагмент, который я обычно использую.
источник
Swift 2.0+
Основываясь на комбинации ответов здесь, я создал решение для себя. Этот метод проверяет только отсутствие разрешения.
У нас есть метод
pickVideo()
, требующий доступа к фотографиям. Если это не так.Authorized
спросите разрешения.Если разрешение не дано,
pickVideo()
он не будет вызываться, и пользователь не сможет выбрать видео.Пока пользователь не предоставил полный доступ к фотографиям, вы можете не позволять ему выбирать или «вылетать» ваше приложение.
источник