【问题标题】:Cordova camera plugin not working in Android mobile but working in emulatorCordova 相机插件无法在 Android 手机中运行,但在模拟器中运行
【发布时间】:2015-06-07 16:46:56
【问题描述】:

我开发了一个应用程序来测试在 Android 手机中打开的相机。我遵循了科尔多瓦相机 API 文档。我的代码在模拟器中运行良好且完美,但在手机中打开相机时无法打开。

这是我的代码: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>

js代码:

document.addEventListener( 'deviceready', onDeviceReady.bind( this ), false );

    function onDeviceReady() {
        // Handle the Cordova pause and resume events
        pictureSource = navigator.camera.PictureSourceType;
        destinationType = navigator.camera.DestinationType;
        document.addEventListener( 'pause', onPause.bind( this ), false );
        document.addEventListener( 'resume', onResume.bind( this ), false );

        // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
    };

脚本:

    <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>

它在波纹模拟器中工作正常,但是当我安装在移动设备中时,相机完全打开了。

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

【问题讨论】:

  • 看不出为什么它在模拟器中工作正常,我看不出你在哪里调用函数'opencam'?

标签: android apache cordova jquery-mobile android-camera


【解决方案1】:

调用 opencam() 函数的时候不是很清楚,你确定你是在设备准备好之后调用它吗?也许模拟器只是速度较慢,它会在相机代码初始化之后执行相机方法,而在设备上调用来得太快。

也不要在相机插件的回调中使用阻塞方法(调试器,警报)我遇到了问题(我已经看过一些关于它的帖子)。使用控制台在你的页面上显示一些东西。

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

希望对你有帮助

【讨论】:

  • ---> 这是我用来调用的代码……它在索引页面中,ondeviceready 函数在 index.js 页面中……Opencam 脚本在索引页面中……
  • 但是您是否看到相机应用程序正在盯着看,然后您看不到图像,或者您甚至没有看到相机应用程序?
  • 我可以看到相机应用程序,但是当我单击打开相机按钮时,它什么也没做。在模拟器中,它可以完美地使用选择文件和取消按钮打开相机。我今天发现的主要原因是它没有单独在移动设备中使用 ondeviceready 功能
  • 如果它没有命中 ondeviceready 可能你的包有问题。你有加载cordova.js 吗?您是在尝试使用 ios 还是 Android ?尝试查看平台日志、android 的 adb、ios 的 xcode 日志。也许你可以在那里看到一个错误
  • 是的,cordova 正在加载解决方案,而不是在构建中,我在构建文件夹中找不到 cordova.js
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多