开发者

Check camera existence in ios phonegap

开发者 https://www.devze.com 2023-04-12 15:57 出处:网络
I want to check camer开发者_StackOverflow中文版a existence before showing the two source types when taking a picture in my phonegap application.For example, iPad 1 doesn\'t have an Camera, therefore I

I want to check camer开发者_StackOverflow中文版a existence before showing the two source types when taking a picture in my phonegap application. For example, iPad 1 doesn't have an Camera, therefore I don't want to show the popup to select source type from Camera and My Photos. Is there something in phonegap that tell me camera exists in this device or not?


Currently, there doesn't appear to be a way to query camera existence.

This is not ideal, but it could be a fail safe for you. If the device doesn't have a camera, a call to getPicture will fall into the fail handler, which returns a message. When the camera isn't available, that message is: "no camera available". So you could handle that failure once, then persist something in user settings, which you could query going forward. Like I said, not ideal. If the API can report this specific failure, it should also provide a way to check existence.

fail: function (message) { if (message == "no camera available") { // save this somewhere so next time we don't have to rely on the fail handler to tell us the camera doesn't exist } }


I needed to do just this, so I added it to a plug in that I made to do various tasks. Only iOS versions so far.

TomPhonegapUtility.h

#import <Foundation/Foundation.h>
#import <Cordova/CDV.h>
@interface TomPhonegapUtility : CDVPlugin
- (void) isCameraAvailable:(CDVInvokedUrlCommand*)command;
@end

TomPhonegapUtility.m

#import "TomPhonegapUtility.h"
#import <Cordova/CDV.h>
@implementation TomPhonegapUtility
- (void) isCameraAvailable:(CDVInvokedUrlCommand*)command {
    CDVPluginResult *pluginResult = nil;
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:1];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:0];
    }
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end

TomPhonegapUtility.js

function TomPhoneGapUtility () {
    this.isCameraAvailable = function(successCallback) {
        cordova.exec(successCallback, function(){}, "TomPhonegapUtility", "isCameraAvailable", []);
    }
}

How to use

var util = new TomPhoneGapUtility();
util.isCameraAvailable(function(hasCamera) {
    if (hasCamera) alert("YES");
    else alert("NO");
});


You can get the device model string from UIDevice class and check this


Should be able to call this code to check for existence of a camera on any device.

if (typeof navigator.camera !== "undefined") { 
  // We are safe to use the camera 
} else { 
  // Bad news no camera 
} 


I have done something like this when trying to use the HTML5 way of taking a picture :

if (typeof navigator.device !== 'undefined' && typeof navigator.device.capture !== 'undefined' && typeof navigator.device.capture.captureImage !== 'undefined') {
   // Can take a picture
} else {
   // No camera
}

Keep in mind that if you have used this solution or the previous one on the IOS simulator, it will give you a reliable answer, the simulator seem to return that it has a camera but is not able to simulate the taking of a picture and will return an error 20 ...

I am not happy with the if statement, if anybody know how to write this in a more logical way, please let me know, my JS knowhow is limited.


I think this explains it well, if you haven't found the answer as of yet: http://docs.phonegap.com/en/1.4.1/phonegap_camera_camera.md.html#Camera

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号