2016-08-11 4 views
2

私のアプリは当初、さまざまなデバイスのカメラとフォトライブラリの両方にアクセスするのに問題はなかった。カメラやフォトライブラリのプライバシーに関する問題を迅速に解決

私は、カメラや写真ライブラリにアクセスできないデバイスや、カメラや写真にアクセスしようとした後でプライバシー設定に表示されないことがわかりました。

私が何をするにしても、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

関連するコードで質問を更新してください。カメラやフォトライブラリにアクセスしようとした後、あなたのアプリの[設定]ページには何が表示されますか? @IBActionのFUNCのopenCameraButton(送信者:ANYOBJECT){ \t \t UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)の場合==真{ \t \t \tせimagePicker = UIImagePickerController() \t \t \t imagePicker – rmaddy

+0

私は、次のコードを使用しています.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使用方法を示すために私の答えを編集しました。引数は "Completion Handlers"です。ネットワーク要求などの非同期タスク、またはこの例ではアクセシビリティを求める場合に使用します。あなたはそれについてここで読むことができます:https://thatthinginswift.com/completion-handlers/ – MCMatan

0

let imagePicker =ボタンアクション内のUIImagePickerController()はクラス名の下に移動し、カメラの権限が戻ってきました。

0

実際のデバイスのiPhone 4sとiPod touch 5およびその他のシミュレータで、自分のコードをすべてのIOSデバイスでテストしました。フォトライブラリへのアクセスを許可しないで、アプリケーションを表示しない唯一のデバイスプライバシーは、iPhone 6のiPad Air 2と網膜です。だから、おそらくディスプレイと同じように思えるかもしれません。

他に誰かがこの問題を抱えていますか?

関連する問題