gpt4 book ai didi

android - Cordova:camera.getPicture 失败,返回 "Camera cancelled"

转载 作者:行者123 更新时间:2023-11-29 01:25:20 26 4
gpt4 key购买 nike

我正在开发一个 cordova 应用程序 (cli-5.2.0),其中使用 cordova 相机插件(cordova-plugin-camera,版本 1.2.0)拍摄照片。

var camera = navigator.camera;
var cameraOptions = {
destinationType: Camera.DestinationType.DATA_URL
};

camera.getPicture(function(result) {
alert('success');
}, function(error) {
alert('fail ' + error);
}, cameraOptions);

此代码工作正常... ..大部分时间。
在一个特别慢的 android 4.4.4 设备上,这只能正常工作 10 次中的 9 次。
大约十分之一,调用失败,说“相机已取消”(尽管它没有被后退按钮或其他东西取消)。

在这种情况下,将触发失败回调“Camera cancelled”,紧接着,Camera UI 仍会显示。
(如果当时拍摄了照片,则不会调用成功回调)。

很难判断这种情况何时发生,但如果设备的应用程序更忙,它看起来会更频繁地发生。
日志文件没有显示更多详细信息,除了以下内容:

Attempted to send a second callback for ID: Camera1337050609

但是,如果调用成功,也会写入这些日志。


非常感谢任何提示或帮助。

感谢您的宝贵时间,
公园

更新 1(对评论的回答)

ProjectDetailCtrl.prototype.takePhoto = function () {
var _this = this;
// this cameraService calls the code from above
return this.cameraService.getPicture()
.then(function (imageData) {
_this.$log.debug('got camera data');
// ..
},
<!-- This is an angular application, the click handling goes like: -->
<md-button ng-click="vm.takePhoto()">
Add photo
</md-button>

最佳答案

我已经看到这个问题在两种情况下发生 - 1) 正如@Joerg 已经提到的那样内存不足,2) 你的事件是级联的,并且被触发了两次。例如,您在一个 div 内的图标上有一个 onClick,它还有另一个事件触发器,如 a-href 或另一个 onClick。

如果您可以发布您的代码,它可能会有所帮助。

更新 - 1:绝对表示内存不足的情况。在这里冒险猜测......1. Camera发生异步调用2. Low memory返回一个Camera cancelled failure事件3.当有足够的可用内存时,相机会稍后打开4. 相机成功事件无法找到回调,因为回调已经在较早的失败事件之后被清除,导致“第二次回调”的情况

现在,您是否每次都遇到完全相同的照片/视频的问题?

您可能可以避免这种情况的方法是 - 不要使用“.then”链接调用,而是实际执行常规异步回调。

此外,您可能想要检查并防止任何较早的“相机服务”调用已完成。

关于android - Cordova:camera.getPicture 失败,返回 "Camera cancelled",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com