Saya sedang mengembangkan aplikasi video yang sangat sederhana. Saya menggunakan kontrol resmi: UIImagePickerController.
Inilah masalahnya. Saat menghadirkan UIImagePickerController untuk pertama kalinya, iOS akan meminta izin. Pengguna dapat mengklik ya atau tidak. Jika pengguna mengklik tidak, kontrol tidak diberhentikan. Sebaliknya, jika pengguna terus mengklik tombol mulai, penghitung waktu akan terus menyala sementara layar selalu hitam, dan pengguna tidak dapat menghentikan penghitung waktu atau kembali. Satu-satunya hal yang dapat dilakukan pengguna adalah mematikan aplikasi. Kali berikutnya UIImagePickerController disajikan, itu masih merupakan layar hitam dan pengguna tidak dapat kembali jika mengklik mulai.
Saya bertanya-tanya apakah itu bug. Apakah ada cara kami dapat mendeteksi izin kamera sehingga kami dapat memutuskan untuk menampilkan UIImagePickerController atau tidak?
sumber
UIImageViewController
tercatat ditambahkan di iOS 2.0, dan dokumen tidak pernah beranotasi untuk mencerminkan bahwa Status AVAuthorization harus digunakan, tetapi hidup dalam kerangka kerja lain.Jawaban:
Periksa
AVAuthorizationStatus
dan tangani kasingnya dengan benar.sumber
#import <AVFoundation/AVFoundation.h>
atau serupaBundle ID
aplikasi setiap kali saya ingin menguji ini. Rasa sakit di gelandangan, tapi setidaknya ada sesuatu. Ingatlah untuk mengatur kembali ID ketika Anda selesai ;-)Swift 4 dan yang lebih baru
Pastikan untuk:
Kode di bawah ini memeriksa semua kemungkinan status izin:
Karena iOS 10 Anda perlu menentukan
NSCameraUsageDescription
kunci di Info.plist Anda untuk dapat meminta akses kamera, jika tidak aplikasi Anda akan macet saat runtime. Lihat API yang Memerlukan Uraian Penggunaan .Sebagai catatan tambahan yang menarik, tahukah Anda bahwa iOS membunuh aplikasi jika sedang berjalan saat Anda mengubah izin kameranya di Pengaturan?
Dari forum Pengembang Apple:
sumber
Solusi Cepat
Dan kemudian untuk menggunakannya Anda lakukan
sumber
Sebagai tambahan untuk jawaban dari @Raptor berikut ini harus disebutkan. Anda mungkin menerima kesalahan berikut ini dimulai dengan 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.
Untuk memperbaikinya, pastikan Anda menangani hasil dari utas utama sebagai berikut (Swift 3):
sumber
Tentukan kunci NSCameraUsageDescription di Info.plist terlebih dahulu. Kemudian periksa AVAuthorizationStatus jika Diotorisasi kemudian tunjukkan UIImagePickerController. Itu akan berhasil.
sumber
Swift: Menggunakan AVFoundation
@IBAction func cameraButtonClicked (pengirim: AnyObject) {
sumber