相机预览在 Android 上首次加载时不显示

Posted

技术标签:

【中文标题】相机预览在 Android 上首次加载时不显示【英文标题】:Camera preview doesn't show on first load on Android 【发布时间】:2015-09-20 12:46:10 【问题描述】:

Cordova 应用,使用相机插件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);
        
    ;
    即使在调用 show() 函数后,相机预览也不会在首次加载时显示。我必须最小化然后再次打开应用程序以显示预览。为什么它在 iOS 上运行良好,但在 Android 上却表现不佳?

更新

如果我从不隐藏它(在我启动相机时删除 .hide() 调用),那么它显示得非常好!如果我隐藏它然后尝试重新显示,就会出现问题。它只会在我最小化然后重新打开应用程序时出现。让它变得更加陌生;如果在上面的 onDeviceReady 内部我调用 .hide() 然后 .show() 立即显示预览窗口!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

遇到了同样的问题,通过在.startCamera()返回的promise的回调中调用.hide()方法解决了这个问题。

this.cameraPreview.startCamera(cameraOptions).then(() => 
   this.camera.hide();
);

这样相机预览只有在完全初始化时才会隐藏。并且您可以稍后在应用程序中的任何时候使用this.cameraPreview.show() 方法打开相机。

【讨论】:

以上是关于相机预览在 Android 上首次加载时不显示的主要内容,如果未能解决你的问题,请参考以下文章

使用屏幕管理器时不显示相机图像

Android:如何通过回调显示相机预览?

在 android 中设置显示方向后,相机相机预览不正确

Android相机预览设置适配及显示方式

Android - 相机预览是横向的

Android - 相机预览是横向的