Android 首次加载时不显示相机预览
Camera preview doesn't show on first load on Android
Cordova 应用程序,使用相机插件https://github.com/mbppower/CordovaCameraPreview
我启动相机服务,将其隐藏,然后当用户点击特定页面时再次显示预览 window。它适用于 iOS,但不适用于 Android。当 运行 它在 Android 设备上时,相机预览 window 默认不显示,但如果我最小化(通过点击主页按钮)然后重新打开应用程序,它会出现.
我已经在显示方法中添加了一个 console.log,它确实被调用了,即使预览 window 没有显示。
主要初始化方法:
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() 它会显示预览 window!
所以我解决了这个问题,但我不明白,希望得到一些反馈。
我没有在我的 onDeviceReady 中调用 camerapreview.hide(),而是在 onDeviceReady 之外调用我的私有函数 _hide()。我想试试这个,因为调用 .hide 然后 .show 显示预览 window,但是调用 .hide .show 然后 .hide 再次出现相同的缺陷。
var _hide = function () {
// Hide camera preview
if(cordova) {
$timeout(function () {
cordova.plugins.camerapreview.hide();
}, 0);
}
};
遇到同样的问题并通过在 .startCamera()
返回的 promise 的回调中调用 .hide()
方法修复了它。
this.cameraPreview.startCamera(cameraOptions).then(() => {
this.camera.hide();
});
这样相机预览只有在完全初始化时才会隐藏。您可以稍后在应用程序中使用 this.cameraPreview.show()
方法随时打开相机。
Cordova 应用程序,使用相机插件https://github.com/mbppower/CordovaCameraPreview
我启动相机服务,将其隐藏,然后当用户点击特定页面时再次显示预览 window。它适用于 iOS,但不适用于 Android。当 运行 它在 Android 设备上时,相机预览 window 默认不显示,但如果我最小化(通过点击主页按钮)然后重新打开应用程序,它会出现.
我已经在显示方法中添加了一个 console.log,它确实被调用了,即使预览 window 没有显示。
主要初始化方法:
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() 它会显示预览 window!
所以我解决了这个问题,但我不明白,希望得到一些反馈。
我没有在我的 onDeviceReady 中调用 camerapreview.hide(),而是在 onDeviceReady 之外调用我的私有函数 _hide()。我想试试这个,因为调用 .hide 然后 .show 显示预览 window,但是调用 .hide .show 然后 .hide 再次出现相同的缺陷。
var _hide = function () {
// Hide camera preview
if(cordova) {
$timeout(function () {
cordova.plugins.camerapreview.hide();
}, 0);
}
};
遇到同样的问题并通过在 .startCamera()
返回的 promise 的回调中调用 .hide()
方法修复了它。
this.cameraPreview.startCamera(cameraOptions).then(() => {
this.camera.hide();
});
这样相机预览只有在完全初始化时才会隐藏。您可以稍后在应用程序中使用 this.cameraPreview.show()
方法随时打开相机。