我在做app调用手机摄像头及图库接口时,一开始是采用cordova提供的插件cordova-plugin-camera(摄像头接口)、cordova-plugin-image-picker(调用图库)方法获得本机摄像头及图库访问权限,具体如下:
获取摄像头
$cordovaToast.showShortCenter('正在打开摄像头...').then(function(success) {
$cordovaCamera.getPicture(options).then(function(imageURI) {
//自定义的方法
UploadPicturesService.uploadPhoto(imageURI);
}, function(err) {
//自定义方法
UploadPicturesService.onFail(err.message);
});
}, function (error) {
// error
});
获取图库接口
$cordovaToast.showShortCenter('正在打开摄像头...').then(function(success) {
$cordovaCamera.getPicture(options).then(function(imageURI) {
//自定义方法
}, function(err) {
//自定义方法
});
}, function (error) {
// error
});
这种是常规的做法,后来我就想能不能直接用input file的方法直接调用手机摄像头及图库,HTML5支持如下方法(多选、调用摄像头、图库):
<input type=file>
<input type=file multiple>
<input type=file accept="image/*">
<input type=file accept="image/*;capture=camera">
在iOS设备上使用正常,但在安卓上存在不同的问题,本人亲测在Android4.2、及Android4.4华为机子上是无法调用摄像头的,图库倒可以,但不支持多选,只能一张一张的选,但在Android5.0机子上,虽然也只能用调用图库,但图库里有摄像头的选项,可以间接调用摄像头。
本人尝试用cordova-plugin-inappbrowser插件,并按如下教程 http://blog.csdn.net/lovelyelfpop/article/details/52815700 配置,但结果是一样的。所以在app开发中最好还是使用原生的接口。但如果是webapp或者是用微信浏览器web开发,除了使用其提供的接口外,用h5提供accept方法还是可行的。