Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Phonegap中启用前置摄像头_Javascript_Android_Html_Cordova_Camera - Fatal编程技术网

Javascript 如何在Phonegap中启用前置摄像头

Javascript 如何在Phonegap中启用前置摄像头,javascript,android,html,cordova,camera,Javascript,Android,Html,Cordova,Camera,使用HTML5和Js在网站上打开网络摄像头,代码如下 <!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" href="headBoxingStyle.css"/> </head> <body style="overflow: hidden"> <div id="headtra

使用HTML5和Js在网站上打开网络摄像头,代码如下

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <link rel="stylesheet" href="headBoxingStyle.css"/>
  </head>
  <body style="overflow: hidden">
    <div id="headtrack"></div>
    <canvas id='canvas' width='100' height='100'></canvas>
    <video width="100" height="100"></video>
  </body>
</html>

<script type="text/javascript">
var onFailSoHard = function(e)
{
    console.log('failed',e);
}

window.URL = window.URL || window.webkitURL;
navigator.getUserMedia = navigator.getUserMedia ||  navigator.webkitGetUserMedia;

var video = document.querySelector('video');

if(navigator.getUserMedia)
{
  navigator.getUserMedia({video: true},function(stream) {
    video.src = window.URL.createObjectURL(stream);
  }, onFailSoHard);
}

document.getElementById('snapshot').onclick = function() { 
  var canvas = document.getElementById('canvas'); 
  var ctx = canvas.getContext('2d'); 
  ctx.drawImage(video,0,0); 
} 
</script>

var OnFailsHard=功能(e)
{
console.log('failed',e);
}
window.URL=window.URL | | window.webkitURL;
navigator.getUserMedia=navigator.getUserMedia | | navigator.webkitGetUserMedia;
var video=document.querySelector('video');
if(navigator.getUserMedia)
{
getUserMedia({video:true},函数(流){
video.src=window.URL.createObjectURL(流);
},onFailSoHard);
}
document.getElementById('snapshot')。onclick=function(){
var canvas=document.getElementById('canvas');
var ctx=canvas.getContext('2d');
ctx.drawImage(视频,0,0);
} 
但如何通过Phonegap打开设备前摄像头呢。不需要拍照或录像,只需显示前摄像头视图。在安装Phonegap摄像头插件的那一刻,添加了权限并测试了Phonegap上的示例代码,该代码运行良好,但上面的代码仅显示了如图中所示的播放符号

以下是权限



Phonegap版本3.1.0 API

根据Phonegap,您可以指定要打开的摄像头,或提供按钮在前后摄像头硬件之间切换

navigator.camera.getPicture( cameraSuccess, cameraError, [ cameraOptions ] );
这里的
Camera选项
有许多属性,但您需要的是摄影机方向

 {cameraDirection:1}; 
在哪里

在Cordova(以前的PhoneGap)上,您无法通过
navigator.getUserMedia
获取图像(据我所知,我也无法从摄像头插件源JavaScript中找到它)。相反,您需要使用。这样,您就可以使用camera检索图像,如下所示(来自插件的文档)

其中,参数destinationType用于确定是使用Base64编码的数据调用成功回调,还是使用映像的URI调用成功回调。如中所述,您可以使用CameraRadirection选项选择相机方向,如示例所示

但是,您应该注意到摄像头插件在其

任何CameradDirection值都会生成背面照片

不幸的是,使用此插件,无法通过编程将摄像头设置为前置摄像头。

  • 列表项
为ANDROID设置此选项:

(in app/res/xml/config.xml)
<feature name="Camera">
    <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
</feature>


(in app/AndroidManifest)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, cameraDirection:1, destinationType:        destinationType.DATA_URL}); }
(在app/res/xml/config.xml中)
(应用程序内/AndroidManifest)
navigator.camera.getPicture(onPhotoDataSuccess,onFail,{quality:50,cameraDirection:1,destinationType:destinationType.DATA_URL});}
  • onSuccess:
    函数cameraCallback(imageData){
    var image=document.getElementById('myImage');
    image.src=“data:image/jpeg;base64,”+imageData;
    }

  • 摄像机方向:

    摄像机方向={ 后退:0,//使用后向摄影机 正面:1//使用正面摄像头 };


    • @RoopeHakulinen:我在Cordova android应用程序中使用了getusermedia,但也没有使用Crosswalk。不过,我也在config.xml中添加了以下内容,以便相机权限能够正常工作

       xmlns:android="http://schemas.android.com/apk/res/android" in the widget tag.
      
      然后

      <config-file mode="merge" parent="/*" target="app/src/main/AndroidManifest.xml">
              <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.CAMERA" />
              <uses-feature android:name="android.hardware.camera" />
              <uses-feature android:name="android.hardware.camera.autofocus" />
              <uses-permission android:name="android.permission.RECORD_AUDIO" />           
      </config-file>
      
      
      
      我还使用了permissions插件,在开始时(启动时)授权相机权限,而不是在以后请求权限

      <plugin name="cordova-plugin-android-permissions" spec="^1.0.0" />
      
      
      
      您正在使用哪个插件API?捕获还是媒体?Phonegap 3.1.0版在上述代码中如何实现?打开前摄像头不需要图片或视频记录。我不同意这一点。getusermedia在使用cordova的IOS中运行良好。它在android上也可以正常运行,只要您使用crosswalk进行部署。@Lee2808我认为没有提到提问者使用crosswalk,问题是关于android的?默认情况下不使用人行横道,在某些情况下,人行横道不适合使用,因此不应假定使用它。@RoopeHakulinen同意没有提到人行横道-我个人认为除了需要在(真正的)低规格设备上运行而不使用它之外,没有其他用例。我对未来的读者发表了评论,如果他们不想在安卓系统上使用摄像头插件,那么安卓系统上还有一个可行的替代方案。我的措辞对你的回答太强烈了!你在哪里初始化照相机?这些参数必须传递到
      getPicture
      方法才能打开前摄像头。安卓系统有什么解决方案吗?你可以为phonegap编写自己的本机模块,在大多数情况下,这就是为什么它被称为“怪癖”。上面的代码对我的三星Galaxy S5不起作用。答案发布已经两年了。当然,他们已经改变了SDK中的某些内容。
       xmlns:android="http://schemas.android.com/apk/res/android" in the widget tag.
      
      <config-file mode="merge" parent="/*" target="app/src/main/AndroidManifest.xml">
              <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.CAMERA" />
              <uses-feature android:name="android.hardware.camera" />
              <uses-feature android:name="android.hardware.camera.autofocus" />
              <uses-permission android:name="android.permission.RECORD_AUDIO" />           
      </config-file>
      
      <plugin name="cordova-plugin-android-permissions" spec="^1.0.0" />