Android

时间:2015-07-02 20:16:13

标签: android cordova camera android-camera cordova-plugins

Cordova app,使用相机插件https://github.com/mbppower/CordovaCameraPreview

我启动相机服务,隐藏它,然后当用户点击特定页面时再次显示预览窗口。它在iOS上完美运行,但不适用于Android。在Android设备上运行时,默认情况下不会显示相机预览窗口,但如果我最小化(通过按主页按钮)然后重新打开应用程序,它会出现。

我已经在show方法中添加了一个console.log,即使预览窗口没有显示,也确实正在调用它。

主要初始化方法:

        var onDeviceReady = function () {

            var tapEnabled = false; //enable tap take picture
            var dragEnabled = false; //enable preview box drag across the screen
            var toBack = false; //send preview box to the back of the webview

            var rect = {x: 428, y: 190, width: 200, height: 150};

            cordova.plugins.camerapreview.startCamera(rect, "front", tapEnabled, dragEnabled, toBack);
            cordova.plugins.camerapreview.hide();
        };
        document.addEventListener('deviceready', onDeviceReady, false);

我的节目和隐藏功能:

    var _show = function () {
        // Show camera preview
        if(cordova) {
            console.log("show camera");
            $timeout(function () {
                cordova.plugins.camerapreview.show();
            }, 250);
        }
    };

    var _hide = function () {
        // Hide camera preview
        if(cordova) {
            $timeout(function () {
                cordova.plugins.camerapreview.hide();
            }, 0);
        }
    };
  1. 即使在调用show()函数后,第一次加载时也不会显示相机预览。我必须最小化,然后再次打开应用程序以进行预览显示。为什么它在iOS上运行良好,但在Android上行为不正常?
  2. 更新

    如果我从不隐藏它(当我启动相机时删除.hide()调用)然后它显示完全正常!如果我隐藏它然后尝试重新显示,就会出现问题。一旦我最小化然后重新打开应用程序,它就会出现。使它更奇怪;如果在onDeviceReady上面我调用.hide()然后立即调用.show()它会显示预览窗口!

2 个答案:

答案 0 :(得分:1)

所以我解决了这个问题,但我不理解它,并希望得到一些反馈。

在onDeviceReady中调用camerapreview.hide(),而不是在onDeviceReady的*之外调用我的私有函数_hide()。我想尝试这个是因为调用.hide然后调用.show显示预览窗口,但调用.hide .show然后再显示.hide再次出现相同的缺陷。

var _hide = function () {
    // Hide camera preview
    if(cordova) {
        $timeout(function () {
            cordova.plugins.camerapreview.hide();
        }, 0);
    }
};

答案 1 :(得分:0)

面对相同的问题,并通过在<script src="https://unpkg.com/axios/dist/axios.min.js"></script>返回的promise的回调中调用.hide()方法来解决此问题。

.startCamera()

这样,摄像机预览仅在完全初始化时才会隐藏。然后您可以使用this.cameraPreview.startCamera(cameraOptions).then(() => { this.camera.hide(); }); 方法在应用中的任意位置打开相机。