質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

5371閲覧

iPhoneのカメラを使用する際にプライバシー許可に関してのアラートが表示されない

hottan

総合スコア11

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/03/08 04:57

編集2017/03/08 05:50

Swift3にてQRコードを読み取るアプリの作成を行っております。
iPoneのバックカメラを使用する際に、
初回起動ではswift側の処理でアラートが表示されていますが、
2回目以降の起動時にプライバシー設定において許可がない時にアラートを表示し、設定に遷移するプログラムを作成したいと考えています。

以下のソースコードを記載しましたが、
addActionを設定の箇所を丸々飛ばしており、アラートが表示されません。
エラーメッセージは表示されておらず、コンパイルも問題なく行われています。

アラートを表示させるにはどうすればよいでしょうか。

----追記

カメラのプライバシー設定の確認を行うcase文では問題なく判定を行っており、プライバシー設定の許可がない場合に到達する.deniedに到達しております。

###該当のソースコード

//カメラの設定+リスナ(delegate)の設定 sessionQueue.async { let status = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) switch (status) { case .authorized: break; case .restricted: self.showCamereAlert() case .notDetermined: break case .denied: print("case:許可なし 到達") self.showCamereAlert() } let devices = AVCaptureDevice.devices() guard let device = devices?.first as? AVCaptureDevice else { assertionFailure("Not found camera") return } do { let input = try AVCaptureDeviceInput(device: device) self.session.addInput(input) } catch let error as NSError { print("エラー発生") assertionFailure(error.debugDescription) return } let output = AVCaptureMetadataOutput() output.setMetadataObjectsDelegate(self, queue: DispatchQueue(label: "meta queue", attributes: [])) self.session.addOutput(output) output.metadataObjectTypes = self.targetTypes } } private func showCamereAlert() { let alert = UIAlertController( title: "カメラアクセス許可なし", message: "カメラへのアクセス許可がありません。設定よりアクセスを許可してください。", preferredStyle: .alert) print("URL設定前") alert.addAction(UIAlertAction(title :"設定", style: .default, handler: {(action: UIAlertAction!) ->Void in if let url = NSURL(string: "App-Prefs:root=Privacy") { print("★★★★★★★★★★★★★★★★★") UIApplication.shared.open(url as URL,options: [:],completionHandler: nil) print("URL設定完了")}else{ print("アラート失敗") } } )) self.present(alert, animated: true, completion: nil) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/03/08 05:03

コードは ``` で囲って下さい。
fuzzball

2017/03/08 05:04

statusは何が返ってきているのでしょうか?
hottan

2017/03/08 05:37

statusにはAVAuthorizationStatusが入っておりました。
fuzzball

2017/03/08 05:51

それは型です。print(status.rawValue)で確認して下さい。
hottan

2017/03/08 06:12

失礼しました。確認したところ2が入っておりました。
guest

回答1

0

ベストアンサー

sessionQueue.async {の中がメインスレッドではなさそうなので、アラートを表示するコードをメインスレッドで実行して下さい。

一々書くと面倒臭いのでこれでいいと思います。

swift

1DispatchQueue.main.async { 2 switch (status) { 3 : 4 } 5}

投稿2017/03/08 06:35

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hottan

2017/03/08 08:03

ご回答ありがとうございます。 メインスレッドに設定したところ無事にアラートが表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問