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);
}
};
更新
如果我从不隐藏它(当我启动相机时删除.hide()调用)然后它显示完全正常!如果我隐藏它然后尝试重新显示,就会出现问题。一旦我最小化然后重新打开应用程序,它就会出现。使它更奇怪;如果在onDeviceReady上面我调用.hide()然后立即调用.show()它会显示预览窗口!
答案 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();
});
方法在应用中的任意位置打开相机。