обнаружить наличие камеры в приложении iphone?

<p>я пишу приложение для ios, и мне нужно уметь определять, есть ли на устройстве камера. раньше я проверял, является ли устройство iphone или нет, так как только у iphone есть камера - но с запуском ipod touch 4 это больше не жизнеспособный вариант. приложение работает без камеры, но наличие камеры добавляет функциональности.</p><p>итак, кто-нибудь может предоставить мне код, который возвращает, есть ли камера или нет?</p>

<p>вы можете использовать метод <code>+issourcetypeavailable:</code> в uiimagepickercontroller:</p><pre><code>if ([uiimagepickercontroller issourcetypeavailable: uiimagepickercontrollersourcetypecamera]) // has camera </code></pre>

<p>если вы используете классы av foundation вместо uiimagepickercontroller, вы можете сделать:</p><pre><code>bool hascamera = ([[avcapturedevice devices] count] > 0); </code></pre><p>если вы используете uiimagepickercontroller, это, вероятно, того не стоит, так как вам придется добавить avfoundation.framework в ваш проект.</p>

<p><strong> swift </strong> <strong> 3 </strong></p><p>как <strong> хуан боэро </strong> написал проверить:</p><pre><code> if uiimagepickercontroller.issourcetypeavailable(.camera){ } </code></pre><p>но я бы добавил еще одну проверку, чтобы увидеть, разрешил ли пользователь доступ к камере, как apple предлагает в своем примере photopicker ( <a href="https://developer.apple.com/library/content/samplecode/photopicker/listings/photopicker\_aplviewcontroller\_h.html">пример photopicker objective-c</a> ):</p><p><strong> * обратите внимание, что вам нужно импортировать avfoundation </strong></p><pre><code>let authstatus = avcapturedevice.authorizationstatus(formediatype: avmediatypevideo) if authstatus == avauthorizationstatus.denied { // denied access to camera // explain that we need camera access and how to change it. let dialog = uialertcontroller(title: "unable to access the camera", message: "to enable access, go to settings > privacy > camera and turn on camera access for this app.", preferredstyle: uialertcontrollerstyle.alert) let okaction = uialertaction(title: "ok", style: uialertactionstyle.default, handler: nil) dialog.addaction(okaction) self.present(dialog, animated:true, completion:nil) } else if authstatus == avauthorizationstatus.notdetermined { // the user has not yet been presented with the option to grant access to the camera hardware. // ask for it. avcapturedevice.requestaccess(formediatype: avmediatypevideo, completionhandler: { (grantd) in // if access was denied, we do not set the setup error message since access was just denied. if grantd { // allowed access to camera, go ahead and present the uiimagepickercontroller. self.showimagepickerforsourcetype(sourcetype: uiimagepickercontrollersourcetype.camera) } }) } else { // allowed access to camera, go ahead and present the uiimagepickercontroller. self.showimagepickerforsourcetype(sourcetype: uiimagepickercontrollersourcetype.camera) } func showimagepickerforsourcetype(sourcetype: uiimagepickercontrollersourcetype) { let mypickercontroller = uiimagepickercontroller() mypickercontroller.delegate = self; mypickercontroller.sourcetype = sourcetype self.present(mypickercontroller, animated: true, completion: nil) } </code></pre>

<p>да, для этого есть api:</p><pre><code>bool iscamera = [uiimagepickercontroller issourcetypeavailable:uiimagepickercontrollersourcetypecamera]; </code></pre>

<p><strong>swift:</strong></p><pre><code>if uiimagepickercontroller.issourcetypeavailable(.camera){ //your code goes here //for example you can print available media types: print(uiimagepickercontroller.availablemediatypesforsourcetype(.camera)) } </code></pre>

<p>если вам нужно знать, имеет ли устройство определенно переднюю или заднюю камеру, используйте это:</p><pre><code>iscameraavailable = [uiimagepickercontroller iscameradeviceavailable:uiimagepickercontrollercameradevicefront]; </code></pre>