Con la nueva funcionalidad en iOS 8, si está usando una cámara en la aplicación, le pedirá permiso para acceder a la cámara y luego, cuando intente volver a tomar la foto, le pedirá permiso para acceder a la biblioteca de fotos. La próxima vez que abra la aplicación, deseo comprobar si la cámara y la biblioteca de fotos tienen permisos de acceso.
Para la cámara, lo reviso por
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}
Estoy buscando algo similar a esto para la biblioteca de fotos.
ios
ios8
phphotolibrary
tech_human
fuente
fuente
Sé que esto ya ha sido respondido, pero solo para expandir la respuesta de @Tim, aquí está el código que necesita (iOS 8 y superior):
No te olvides de
#import <Photos/Photos.h>
Si está utilizando Swift 3.0 o superior, puede utilizar el siguiente código:
No te olvides de
import Photos
fuente
Como formalidad, la versión Swift 2.X :
Y Swift 3 / Swift 4 :
fuente
import Photos
, si desea utilizar PHPhotoLibraryAquí hay una guía completa para iOS 8+ (sin ALAssetLibrary):
En primer lugar, debemos proporcionar una descripción de uso , ya que ahora es requerida por PHPhotoLibrary.
Para hacer esto debemos abrir el
info.plist
archivo, buscar la clavePrivacy - Photo Library Usage Description
y darle un valor. Si la clave no existe, créala.Aquí hay una imagen por ejemplo:
También asegúrese de que el valor de la clave
Bundle name
no esté vacío eninfo.plist
archivo.Ahora que tenemos una descripción, normalmente podemos solicitar autorización llamando al
requestAuthorization
método:NOTA 1: en
requestAuthorization
realidad, no muestra alerta en cada llamada. Se muestra una vez cada cierto tiempo, guarda la respuesta del usuario y la devuelve cada vez en lugar de mostrar la alerta nuevamente. Pero como no es lo que necesitamos, aquí hay un código útil que siempre muestra una alerta cada vez que necesitamos permiso (con redirección a la configuración):Problema común 1: algunos usuarios se quejan de que la aplicación no muestra una alerta después de realizar los cambios mencionados anteriormente en el
info.plist
archivo.Solución: Para probar, intente cambiar
Bundle Identifier
del archivo del proyecto a otra cosa, limpie y reconstruya la aplicación. Si comenzó a funcionar, entonces todo está bien, cámbiele el nombre.Problema común 2: hay un caso específico en el que los resultados de recuperación no se actualizan (y las vistas que usaron imágenes de esas solicitudes de recuperación siguen vacías en consecuencia) cuando la aplicación obtiene permisos para las fotos, mientras se ejecuta como se prometió en la documentación.
En realidad sucede cuando usamos código INCORRECTO como este:
En este caso, si el usuario negó otorgar permisos y
viewDidLoad
luego saltó a la configuración, permitió y saltó de nuevo a la aplicación, las vistas no se actualizarán porque[self reloadCollectionView]
no se enviaron las solicitudes de recuperación.Solución: solo tenemos que llamar
[self reloadCollectionView]
y realizar otras solicitudes de recuperación antes de requerir una autorización como esta:fuente
Lo hice así:
Y envío lo que tengo que hacer como bloqueo dependiendo del éxito o el fracaso.
fuente
ACTUALIZACIÓN para: SWIFT 3 IOS10
Nota: importe fotos en AppDelegate.swift de la siguiente manera
// AppDelegate.swift
importar UIKit
importar fotos
...
Respuesta actualizada de Alvin George
fuente
El uso de ALAssetsLibrary debería funcionar:
fuente
fuente
Aquí hay un pequeño y simple fragmento que suelo usar.
fuente
Swift 2.0+
Basado en una combinación de respuestas aquí, he creado una solución para mí. Este método solo verifica si no hay permiso.
Tenemos un método
pickVideo()
que requiere acceso a fotos. Si no es.Authorized
pida permiso.Si no se da permiso,
pickVideo()
no se le llamará y el usuario no podrá elegir un video.Siempre que el usuario no le dé acceso completo a las fotos, puede evitar dejar que escoja "o bloquee" su aplicación.
fuente