Dengan fungsionalitas baru di iOS 8, jika Anda menggunakan kamera di aplikasi, itu akan meminta izin untuk mengakses kamera dan kemudian ketika Anda mencoba untuk mengambil kembali foto, itu meminta izin untuk mengakses perpustakaan foto. Lain kali ketika saya meluncurkan aplikasi, saya ingin memeriksa apakah kamera dan perpustakaan foto memiliki izin akses ke sana.
Untuk kamera, saya memeriksanya
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}
Saya mencari sesuatu yang mirip dengan ini untuk perpustakaan foto.
ios
ios8
phphotolibrary
tech_human
sumber
sumber
Saya tahu ini sudah dijawab, tetapi hanya untuk memperluas jawaban @Tim, berikut adalah kode yang Anda butuhkan (iOS 8 ke atas):
Jangan lupa
#import <Photos/Photos.h>
Jika Anda menggunakan Swift 3.0 atau lebih tinggi, Anda dapat menggunakan kode berikut:
Jangan lupa
import Photos
sumber
Sama seperti formalitas, versi Swift 2.X :
Dan Swift 3 / Swift 4 :
sumber
import Photos
, jika Anda ingin menggunakan PHPhotoLibraryBerikut adalah panduan lengkap untuk iOS 8+ (tanpa ALAssetLibrary):
Pertama kita harus memberikan deskripsi penggunaan seperti yang sekarang dibutuhkan oleh PHPhotoLibrary.
Untuk melakukan ini kita harus membuka
info.plist
file, menemukan kunciPrivacy - Photo Library Usage Description
dan memberikan nilainya. Jika kunci tidak ada, buat saja.Berikut adalah gambarnya misalnya:
Pastikan juga bahwa nilai key
Bundle name
tidak kosonginfo.plist
file.Sekarang ketika kami memiliki deskripsi, kami biasanya dapat meminta otorisasi dengan memanggil
requestAuthorization
metode:CATATAN 1:
requestAuthorization
sebenarnya tidak menunjukkan peringatan pada setiap panggilan. Ini ditampilkan sekali per beberapa waktu, menyimpan jawaban pengguna dan mengembalikannya setiap kali alih-alih menampilkan peringatan lagi. Tetapi karena bukan itu yang kita butuhkan, berikut adalah kode berguna yang selalu menunjukkan peringatan setiap kali kita membutuhkan izin (dengan pengalihan ke pengaturan):Masalah umum 1: Beberapa pengguna mengeluh bahwa aplikasi tidak menunjukkan peringatan setelah melakukan perubahan
info.plist
file yang disebutkan di atas .Solusi: Untuk pengujian, coba ubah
Bundle Identifier
dari file proyek ke yang lain, bersihkan dan bangun kembali aplikasi. Jika mulai berfungsi maka semuanya baik-baik saja, ganti namanya kembali.Masalah Umum 2: Ada beberapa kasus khusus ketika hasil pengambilan tidak diperbarui (dan tampilan yang menggunakan gambar dari permintaan pengambilan tersebut masih kosong) saat aplikasi mendapat izin untuk foto, saat berjalan seperti yang dijanjikan dalam dokumentasi.
Sebenarnya itu terjadi ketika kita menggunakan kode SALAH seperti ini:
Dalam kasus ini, jika pengguna menolak memberikan izin
viewDidLoad
kemudian melompat ke pengaturan, diizinkan dan kembali ke aplikasi, tampilan tidak akan disegarkan karena[self reloadCollectionView]
dan permintaan pengambilan tidak dikirim.Solusi: Kami hanya perlu menelepon
[self reloadCollectionView]
dan melakukan permintaan pengambilan lainnya sebelum memerlukan otorisasi seperti ini:sumber
Saya melakukannya seperti ini:
Dan saya mengirimkan apa yang perlu saya lakukan sebagai blok tergantung pada keberhasilan atau kegagalan.
sumber
UPDATE untuk: SWIFT 3 IOS10
Catatan: impor Foto di AppDelegate.swift sebagai berikut
// AppDelegate.swift
impor UIKit
impor Foto
...
Jawaban diperbarui dari Alvin George
sumber
Menggunakan ALAssetsLibrary seharusnya berfungsi:
sumber
sumber
Berikut ini potongan kecil dan sederhana yang biasa saya gunakan.
sumber
Swift 2.0+
Berdasarkan kombinasi jawaban di sini, saya telah membuat solusi untuk diri saya sendiri. Metode ini hanya memeriksa jika tidak ada izin.
Kami mendapat metode
pickVideo()
yang membutuhkan akses ke foto. Jika tidak.Authorized
minta izin.Jika izin tidak diberikan,
pickVideo()
tidak akan dipanggil, dan pengguna tidak dapat memilih video.Selama pengguna tidak memberikan akses penuh ke foto, Anda dapat menghindari untuk membiarkan mereka memilih 'atau merusak' aplikasi Anda.
sumber