Estoy desarrollando una aplicación de video muy simple. Yo uso el control oficial: UIImagePickerController.
Aquí está el problema. Al presentar el UIImagePickerController por primera vez, el iOS solicitará el permiso. El usuario puede hacer clic en sí o no. Si el usuario hace clic en no, el control no se descarta. En cambio, si el usuario sigue haciendo clic en el botón de inicio, los temporizadores continúan mientras la pantalla siempre está en negro, y el usuario no puede detener los temporizadores o volver. Lo único que puede hacer el usuario es matar la aplicación. La próxima vez que se presente el UIImagePickerController, sigue siendo una pantalla en negro y el usuario no puede regresar si hace clic en Inicio.
Me preguntaba si es un error. ¿Hay alguna forma de que podamos detectar el permiso de la cámara para que podamos decidir mostrar el UIImagePickerController o no?
fuente
UIImageViewController
se nota como agregado en iOS 2.0, y los documentos nunca se anotaron para reflejar que el AVAuthorizationStatus debería usarse, pero vive en otro marco.Respuestas:
Verifique
AVAuthorizationStatus
y maneje las cajas correctamente.fuente
#import <AVFoundation/AVFoundation.h>
o similarBundle ID
la aplicación cada vez que quiero probar esto. Un dolor en el trasero, pero algo, al menos. Solo recuerde volver a configurar la ID cuando haya terminado ;-)Swift 4 y más reciente
Asegurate que:
El siguiente código verifica todos los posibles estados de permiso:
Desde iOS 10, debe especificar la
NSCameraUsageDescription
clave en su Info.plist para poder solicitar acceso a la cámara, de lo contrario, su aplicación se bloqueará en el tiempo de ejecución. Consulte las API que requieren descripciones de uso .Como nota al margen interesante, ¿sabía que iOS mata la aplicación si se está ejecutando mientras cambia los permisos de la cámara en Configuración?
Del foro de desarrolladores de Apple:
fuente
Solución rápida
Y luego, para usarlo, lo haces
fuente
Como una adición a la respuesta de @Raptor, se debe mencionar lo siguiente. Puede recibir el siguiente error a partir de iOS 10:
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Para solucionar esto, asegúrese de manejar los resultados del hilo principal de la siguiente manera (Swift 3):
fuente
Especifique la clave NSCameraUsageDescription en Info.plist primero. Luego marque AVAuthorizationStatus si está autorizado y presente el UIImagePickerController Funcionará.
fuente
Swift: utilizando AVFoundation
@IBAction func cameraButtonClicked (remitente: AnyObject) {
fuente