Cordova摄像头插件不适用于Android mobile,但适用于emulator

Cordova摄像头插件不适用于Android mobile,但适用于emulator,android,apache,cordova,jquery-mobile,android-camera,Android,Apache,Cordova,Jquery Mobile,Android Camera,我开发了一个应用程序来测试Android手机上打开的摄像头。我遵循了cordova camera API文档。我的代码在emulator中运行良好,但在mobile中打开相机时无法打开 下面是我的代码:config.xml <?xml version="1.0" encoding="utf-8"?> <widget xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.co

我开发了一个应用程序来测试Android手机上打开的摄像头。我遵循了cordova camera API文档。我的代码在emulator中运行良好,但在mobile中打开相机时无法打开

下面是我的代码:config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps" id="io.cordova.CameraTest" version="1.0.0" xmlns="http://www.w3.org/ns/widgets">
  <name>CameraTest</name>
  <description>A blank project that uses Apache Cordova to help you build an app that targets multiple mobile platforms: Android, iOS, Windows, and Windows Phone.</description>
  <author href="http://cordova.io" email="dev@cordova.apache.org">Apache Cordova Team </author>
  <content src="index.html" />
  <access origin="*" />
  <preference name="SplashScreen" value="screen" />
  <preference name="windows-target-version" value="8.0" />
  <preference name="windows-phone-target-version" value="8.1" />
  <vs:plugin name="org.apache.cordova.camera" version="0.3.2" />
  <vs:plugin name="org.apache.cordova.dialogs" version="0.2.10" />
  <feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/camera"/>
<feature name="http://api.phonegap.com/1.0/file"/>
<feature name="http://api.phonegap.com/1.0/media"/>
<feature name="http://api.phonegap.com/1.0/network"/>
  <vs:platformSpecificValues />
</widget>
脚本:

    <script src="cordova.js"></script>
<script>
         var pictureSource;
                var destinationType;
                function opencam() {

                    navigator.camera.getPicture(onsucess, onfail, {
                        quality: 50,
                        destinationType: destinationType.DATA_URL,
                        allowEdit: true,
                        targetWidth: 100,
                        targetHeight: 100,
                        saveToPhotoAlbum: false
                    });
                }

                function onsucess(imageData) {

                    debugger;
                }
                function onfail(message) {
                    alert("Error: " + message);
                    debugger;
                }
</script>

var图片资源;
变量destinationType;
函数opencam(){
navigator.camera.getPicture(onSuces、onfail、{
质量:50,
destinationType:destinationType.DATA\u URL,
允许:是的,
目标宽度:100,
目标:100,
saveToPhotoAlbum:false
});
}
函数onSuces(图像数据){
调试器;
}
函数onfail(消息){
警报(“错误:+消息);
调试器;
}
它在ripple emulator中运行良好,但当我在mobile中安装时,摄像头根本就处于打开状态


注意:我的解决方案中没有
androidmanifest.xml
文件。

调用opencam()函数时不太清楚,您确定要在设备就绪后调用它吗?也许模拟器的速度比较慢,在初始化摄像头代码之后,它会执行摄像头方法,而在设备上调用来得太早

也不要在摄像头插件的回调中使用阻塞方法(调试器、警报),我对它们有问题(我也看到过一些关于它的帖子)。使用控制台在页面上显示一些内容

最后一条建议不要使用DATA_URL检索图像,使用此选项cordova将base64字符串与图像一起传递,但图像在您的真实设备上可能非常大(最差的base64比原始格式大30%),因此很容易使您的应用程序崩溃。尝试使用文件URI,这样会更好


希望这有帮助

我看不出为什么它在emulator中运行良好,我看不出在哪里调用函数“opencam”?-->这是我用来调用的代码。。。在索引页面中,ondeviceready函数位于index.js页面中。。。Opencam脚本在索引页中…但您是否看到摄像头应用程序启动,然后您没有看到图像,或者您甚至没有看到摄像头应用程序?我可以看到摄像头应用程序,但当我单击“打开摄像头”按钮时,它没有做任何事情。。在emulator中,通过“选择文件”和“取消”按钮打开相机,它可以完美地工作。。我今天发现的主要原因是它没有在手机上单独使用ondeviceready功能。如果它没有使用ondeviceready功能,可能你的软件包中有问题。是否已加载cordova.js?你是在尝试使用ios还是Android?尝试查看平台日志、android的adb、ios的xcode日志。也许你们可以看到一个错误是cordova正在加载解决方案中,而不是在构建中,我在构建文件夹中找不到cordova.js
    <script src="cordova.js"></script>
<script>
         var pictureSource;
                var destinationType;
                function opencam() {

                    navigator.camera.getPicture(onsucess, onfail, {
                        quality: 50,
                        destinationType: destinationType.DATA_URL,
                        allowEdit: true,
                        targetWidth: 100,
                        targetHeight: 100,
                        saveToPhotoAlbum: false
                    });
                }

                function onsucess(imageData) {

                    debugger;
                }
                function onfail(message) {
                    alert("Error: " + message);
                    debugger;
                }
</script>