Dzięki nowej funkcji w iOS 8, jeśli używasz aparatu w aplikacji, zapyta o pozwolenie na dostęp do aparatu, a następnie, gdy spróbujesz ponownie zrobić zdjęcie, prosi o pozwolenie na dostęp do biblioteki zdjęć. Następnym razem, gdy uruchomię aplikację, chcę sprawdzić, czy aparat i biblioteka zdjęć mają do niej dostęp.
W przypadku aparatu sprawdzam to
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}
Szukam czegoś podobnego do biblioteki zdjęć.
ios
ios8
phphotolibrary
tech_human
źródło
źródło
Wiem, że już na to odpowiedziano, ale aby rozwinąć odpowiedź @Tim, oto kod, którego potrzebujesz (iOS 8 i nowsze):
Nie zapomnij
#import <Photos/Photos.h>
Jeśli używasz Swift 3.0 lub nowszego, możesz użyć następującego kodu:
Nie zapomnij
import Photos
źródło
Podobnie jak formalność, wersja Swift 2.X :
Oraz Swift 3 / Swift 4 :
źródło
import Photos
, jeśli chcesz używać PHPhotoLibraryOto kompletny przewodnik dla iOS 8+ (bez ALAssetLibrary):
Najpierw musimy podać opis użycia, ponieważ teraz jest to wymagane przez PHPhotoLibrary.
Aby to zrobić, musimy otworzyć
info.plist
plik, znaleźć kluczPrivacy - Photo Library Usage Description
i podać mu wartość. Jeśli klucz nie istnieje, po prostu go utwórz.Oto przykładowy obraz:
Upewnij się również, że wartość klucza
Bundle name
nie jest pusta winfo.plist
pliku.Teraz, gdy mamy opis, możemy normalnie zażądać autoryzacji przez wywołanie
requestAuthorization
metody:UWAGA 1: w
requestAuthorization
rzeczywistości nie wyświetla powiadomienia przy każdym połączeniu. Pokazuje się raz na jakiś czas, zapisuje odpowiedź użytkownika i zwraca ją za każdym razem, zamiast ponownie pokazywać alert. Ale ponieważ to nie jest to, czego potrzebujemy, oto przydatny kod, który zawsze wyświetla alert za każdym razem, gdy potrzebujemy pozwolenia (z przekierowaniem do ustawień):Typowy problem 1: Niektórzy użytkownicy narzekają, że aplikacja nie wyświetla ostrzeżenia po wprowadzeniu wyżej wymienionych zmian w
info.plist
pliku.Rozwiązanie: W celu przetestowania spróbuj zmienić
Bundle Identifier
plik projektu na inny, wyczyść i przebuduj aplikację. Jeśli zaczął działać, wszystko jest w porządku, zmień nazwę z powrotem.Typowy problem 2: Jest pewien szczególny przypadek, gdy wyniki pobierania nie są aktualizowane (a widoki, które korzystały z obrazów z tych żądań pobierania, nadal są odpowiednio puste), gdy aplikacja uzyskuje uprawnienia do zdjęć, działając zgodnie z obietnicą w dokumentacji.
Właściwie to się dzieje, gdy używamy ZŁEGO kodu w ten sposób:
W takim przypadku, jeśli użytkownik odmówił przyznania uprawnień,
viewDidLoad
a następnie przeskoczył do ustawień, zezwolił i wrócił do aplikacji, widoki nie zostaną odświeżone, ponieważ[self reloadCollectionView]
i żądania pobierania nie zostały wysłane.Rozwiązanie: musimy tylko zadzwonić
[self reloadCollectionView]
i wykonać inne żądania pobierania, zanim zażądamy autoryzacji w następujący sposób:źródło
Zrobiłem to tak:
I wysyłam to, co muszę zrobić jako blok w zależności od sukcesu lub porażki.
źródło
AKTUALIZACJA dla: SWIFT 3 IOS10
Uwaga: importuj zdjęcia w AppDelegate.swift w następujący sposób
// AppDelegate.swift
import UIKit
importować zdjęcia
...
Odpowiedź zaktualizowana przez Alvin George
źródło
Używanie ALAssetsLibrary powinno działać:
źródło
źródło
Oto mały i prosty fragment, którego zwykle używam.
źródło
Swift 2.0+
Na podstawie kombinacji odpowiedzi tutaj stworzyłem rozwiązanie dla siebie. Ta metoda sprawdza tylko, czy nie ma pozwolenia.
Mamy metodę,
pickVideo()
która wymaga dostępu do zdjęć. Jeśli nie,.Authorized
poproś o pozwolenie.Jeśli pozwolenie nie zostanie udzielone,
pickVideo()
nie zostanie wywołane, a użytkownik nie może wybrać wideo.Dopóki użytkownik nie zapewnił pełnego dostępu do zdjęć, możesz uniknąć wybierania „lub zawieszania się” aplikacji.
źródło