2016-08-11 53 views
2

我的應用程序最初在各種設備上訪問相機和照片庫時都沒有問題。swift中相機和照片庫的隱私問題

現在我發現在某些設備上我無法訪問相機或照片庫,並且在嘗試訪問相機和照片後,該應用在隱私設置中完全不顯示。

無論我做什麼,我都無法讓IOS識別我的應用程序。

我能做些什麼來訪問相機和照片庫,並讓我的應用出現在隱私設置中? 代碼:

@IBAction func openCameraButton(sender: AnyObject) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) == true { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = .Camera//UIImagePickerControllerSourceType.Camera; 
     imagePicker.allowsEditing = false 
     self.presentViewController(imagePicker, animated: true, completion: nil) 
    }else{ 
     noCamera() 

    } 
} 
@IBAction func openPhotoLibraryButton(sender: AnyObject) { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) == true { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary; 
     imagePicker.allowsEditing = true 
     self.presentViewController(imagePicker, animated: true, completion: nil) 
    }else{ 
     noAccess() 
    } 
} 
+0

用相關代碼更新您的問題。在嘗試訪問攝像頭和照片庫後,您對應用的「設置」頁面有什麼看法? – rmaddy

+0

我使用以下代碼: @IBAction FUNC openCameraButton(發件人:AnyObject){ \t \t如果UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)==真{ \t \t \t讓imagePicker =的UIImagePickerController() \t \t \t imagePicker .delegate = self \t \t \t imagePicker.sourceType = .Camera // UIImagePickerControllerSourceType.Camera; \t \t \t imagePicker.allowsEditing =假 \t \t \t self.presentViewController(imagePicker,動畫:真,完成:無) \t \t}否則{ \t \t \t noCamera() \t \t \t \t } \t \t } 對於相機和相似的照片 – Jeremy

回答

0

我使用此代碼爲通俗易懂的檢查並在必要時要求其:

import AVFoundation 
import Photos 

func getCameraAccessibilityAndRequestIfNeeded(completion: (isAccesible: Bool)->Void) { 
    let authorizationState = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 
    switch authorizationState { 
    case .NotDetermined: 
     AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (didAllow) in 
      completion(isAccesible: didAllow) 
     }) 
    case .Restricted: 
     completion(isAccesible: false) 
    case .Denied: 
     completion(isAccesible: true) 
    case .Authorized: 
     completion(isAccesible: true) 
} 
} 

func getPhotoRollAccessibilityAndRequestIfNeeded(completion: (isAccesible: Bool)->Void) { 
    PHPhotoLibrary.requestAuthorization { (status) in 
     switch status { 
     case .Authorized: 
      completion(isAccesible: true) 
     case .Restricted, .Denied , .NotDetermined: 
      completion(isAccesible: false) 
     } 
    } 
} 

用法:

self.getCameraAccessibilityAndRequestIfNeeded { (isAccesible) in 
      if isAccesible { 
       // Access confirmed 
      } else { 
       // No access 
      } 
     } 

     self.getPhotoRollAccessibilityAndRequestIfNeeded { (isAccesible) in 
      if isAccesible { 
       // Access confirm 
      } else { 
       // No access 
      } 
     } 
+0

謝謝 我知道必須導入AVFounda但我不知道如何調用函數,即每種情況下的參數是什麼 – Jeremy

+0

@Jeremy我編輯了我的答案以顯示如何使用。而論點是「完成處理程序」。您可以將其用於網絡請求等異步任務,或者在此示例中請求可訪問性。你可以在這裏閱讀:https://thatthinginswift.com/completion-handlers/ – MCMatan

0

最終的答案很簡單:

我在做imagePicker =按鈕操作中的UIImagePickerController()將它移動到類名稱下方,並且攝像頭權限返回。

0

我現在已經在所有IOS設備上測試了我的代碼 - 在實際設備上iPhone 4s和iPod 5觸摸,其餘模擬器 - 繼續不允許訪問照片庫的唯一設備,也不顯示該應用程序隱私是iPhone 6的iPad Air 2和視網膜 - 所以它看起來也許也適用於顯示器。

有沒有其他人有這個問題?