Com a nova funcionalidade do iOS 8, se você estiver usando uma câmera no aplicativo, ele pedirá permissão para acessar a câmera e quando você tentar refazer a foto, ele pedirá permissão para acessar a fototeca. Da próxima vez, quando eu iniciar o aplicativo, gostaria de verificar se a câmera e a biblioteca de fotos têm permissões de acesso a ele.
Para a câmera, eu verifico por
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}
Estou procurando algo semelhante a isto para a biblioteca de fotos.
ios
ios8
phphotolibrary
tech_human
fonte
fonte
Eu sei que isso já foi respondido, mas apenas para expandir a resposta @Tim, aqui está o código de que você precisa (iOS 8 e superior):
Não se esqueça de
#import <Photos/Photos.h>
Se você estiver usando Swift 3.0 ou superior, pode usar o seguinte código:
Não se esqueça de
import Photos
fonte
Como formalidade, versão Swift 2.X :
E Swift 3 / Swift 4 :
fonte
import Photos
, se você quiser usar o PHPhotoLibraryAqui está um guia completo para iOS 8+ (sem ALAssetLibrary):
Em primeiro lugar, temos que fornecer uma descrição de uso, pois agora ela é exigida pelo PHPhotoLibrary.
Para fazer isso, devemos abrir o
info.plist
arquivo, encontrar a chavePrivacy - Photo Library Usage Description
e fornecer um valor para ela. Se a chave não existir, basta criá-la.Aqui está uma imagem, por exemplo:
Certifique-se também de que o valor da chave
Bundle name
não está vazio noinfo.plist
arquivo.Agora, quando temos a descrição, podemos normalmente solicitar autorização chamando o
requestAuthorization
método:NOTA 1:
requestAuthorization
na verdade não mostra alerta em todas as chamadas. Mostra uma vez a cada vez, salva a resposta do usuário e a retorna todas as vezes ao invés de mostrar o alerta novamente. Mas como não é o que precisamos, aqui está um código útil que sempre mostra alerta sempre que precisamos de permissão (com redirecionamento para as configurações):Problema comum 1: Alguns usuários reclamam que o aplicativo não mostra alerta após fazer as alterações mencionadas acima no
info.plist
arquivo.Solução: Para testar, tente mudar
Bundle Identifier
do arquivo de projeto para outro, limpe e reconstrua o aplicativo. Se começou a funcionar, então está tudo bem, renomeie-o novamente.Problema comum 2: há alguns casos específicos em que os resultados de busca não são atualizados (e as visualizações que usaram imagens dessas solicitações de busca ainda estão vazias de acordo) quando o aplicativo obtém permissões para fotos, enquanto é executado conforme prometido na documentação.
Na verdade, isso acontece quando usamos código ERRADO como este:
Nesse caso, se o usuário negou a concessão de permissões
viewDidLoad
, saltou para as configurações, permitiu e voltou para o aplicativo, as visualizações não serão atualizadas porque as[self reloadCollectionView]
solicitações de busca não foram enviadas.Solução: só precisamos ligar
[self reloadCollectionView]
e fazer outras solicitações de busca antes de exigir uma autorização como esta:fonte
Eu fiz assim:
E envio o que preciso fazer como bloqueio, dependendo do sucesso ou do fracasso.
fonte
ATUALIZAÇÃO para: SWIFT 3 IOS10
Nota: importe fotos em AppDelegate.swift da seguinte forma
// AppDelegate.swift
importar UIKit
importar fotos
...
Resposta atualizada de Alvin George
fonte
Usar ALAssetsLibrary deve funcionar:
fonte
fonte
Aqui está um pequeno e simples trecho que costumo usar.
fonte
Swift 2.0+
Com base em uma combinação de respostas aqui, criei uma solução para mim. Este método verifica apenas se não há permissão.
Temos um método
pickVideo()
que requer acesso às fotos. Se não for,.Authorized
peça permissão.Se a permissão não for concedida,
pickVideo()
não será chamado e o usuário não poderá escolher um vídeo.Contanto que o usuário não conceda acesso total às fotos, você pode evitar que ele escolha 'ou trave' seu aplicativo.
fonte