Phonegap getPicture功能长时间延迟,恢复后重新开始

时间:2014-03-26 19:11:26

标签: javascript android cordova cordova-3

在Android设备上的Cordova / Phonegap 3.2应用中捕获照片时出现问题。

当我运行navigator.camera.getPicture功能时,相机会在大约30秒后返回成功,有时会更长。但是,当我再次点击相机按钮(再次运行navigator.camera.getPicture函数,而不捕获镜头)时,它会立即将控件返回到应用程序并恢复应用程序的进程。

它看起来就像我捕获图像后它停留的应用程序(虽然我确实在相机完成拍摄照片后返回应用程序),以及导致相机继续操作并进入{的唯一因素{1}}是再次运行success function功能。

这不会发生在iOS7上,我只在Android上体验过它(尝试使用Android版本2.3.5,4.1.2 )。

我在getPicture来电之前发出了提示,但运行正常。我还在成功功能中发出警报,但它没有运行。所以我假设捕获插件中的其他内容会导致延迟。

我已经检查了CPU并且它很低。我禁用了任何其他后台进程和webservice调用,以确保它不会导致此行为。

我还使用了非常小的图像尺寸,以确保图像的大尺寸不会导致此问题。所以我也消除了图像尺寸因子。

getPicture函数:

navigator.camera.getPicture

LOG For Behavior 1:

保存图像后:

 navigator.camera.getPicture(function () {   
        // On get photo success

        that._onPhotoURISuccess.apply(that, arguments);
         return false;
    }, function (err) {


    }, {
        quality: CAPTURED_PHOTO_IMAGE_QUALITY,
        destinationType: Camera.DestinationType.FILE_URI, 
        encodingType: Camera.EncodingType.JPEG,
        saveToPhotoAlbum: SETTINGS_SAVE_TO_PHOTO_ALBUM,
        allowEdit: false,
        sourceType: Camera.PictureSourceType.CAMERA, 
        targetWidth: maxSize, // <= 1024
        targetHeight: maxSize, 
        correctOrientation: true,  
    });

两分钟后,我决定再次点击相机按钮:

03-27 21:11:10.812: V/webview(11988):  singleCursorHandlerTouchEvent -getEditableSupport  FASLE 
03-27 21:11:11.281: D/CordovaActivity(11988): Paused the application!
03-27 21:11:11.281: D/CordovaWebView(11988): Handle the pause
03-27 21:11:11.296: W/PluginManager(11988): THREAD WARNING: exec() call to Camera.takePicture blocked the main thread for 33ms. Plugin should use CordovaInterface.getThreadPool().
03-27 21:11:11.382: W/PluginManager(11988): THREAD WARNING: exec() call to WebSocket.send blocked the main thread for 18ms. Plugin should use CordovaInterface.getThreadPool().
03-27 21:11:12.117: W/IInputConnectionWrapper(11988): showStatusIcon on inactive InputConnection
03-27 21:11:17.070: D/CordovaActivity(11988): Incoming Result
03-27 21:11:17.070: D/CordovaActivity(11988): Request code = 34
03-27 21:11:17.070: D/CordovaActivity(11988): We have a callback to send this result to
03-27 21:11:17.585: D/dalvikvm(11988): GC_EXTERNAL_ALLOC freed 563K, 52% free 4167K/8519K, external 5208K/5208K, paused 85ms
03-27 21:11:18.734: D/dalvikvm(11988): GC_EXPLICIT freed 19K, 52% free 4161K/8519K, external 8280K/8422K, paused 64ms
03-27 21:11:18.750: D/Whitelist(11988): Unlimited access to network resources
03-27 21:11:18.757: I/CordovaLog(11988): Found start page location: index.html
03-27 21:11:18.757: D/Config(11988): The <log> tags is deprecated. Use <preference name="loglevel" value="DEBUG"/> instead.
03-27 21:11:18.757: I/CordovaLog(11988): Changing log level to DEBUG(3)
03-27 21:11:18.757: D/CordovaActivity(11988): Resuming the App
03-27 21:11:18.757: D/CordovaActivity(11988): CB-3064: The errorUrl is null
03-27 21:11:18.789: V/webview(11988): OnSizeChanged: Enter 
03-27 21:11:18.804: D/SoftKeyboardDetect(11988): Ignore this event
03-27 21:11:19.125: V/webview(11988): OnSizeChanged: Enter 

更新2:我注意到了另一件事。当我对getPicture函数的错误回调发出警告时,我得到了#34; Cameera取消了#34;错误。虽然当我再次启动相机时,会调用成功回调。

更新3: experienced the same issue

的其他人

我在更多细节中遇到的三种行为:

行为1:

  1. 我点击了相机拍摄按钮
  2. 单击以将照片保存在相机预览窗口中
  3. 没有任何反应,调用成功或失败回调(等待2分钟)
  4. 我再次点击相机按钮,调用成功回调,我点击相机预览窗口的后退按钮
  5. 我可以在视图中看到图片
  6. 从第二次按下相机按钮时获取失败回调(我假设它来自第二次)
  7. 行为2:

    1. 我点击了相机拍摄按钮
    2. 5-30秒后,成功回调称为
    3. CPU为100%(上传图片)
    4. 上传成功函数
    5. 行为3:

      1. 我点击了相机拍摄按钮
      2. 我取消了捕获并返回应用
      3. 约会后调用失败回调。 15秒
      4. 如果我在第2步之后立即点击相机按钮,我会立即收到失败回叫
      5. 这些是主要问题。当我用第二个摄像头getPicture调用中断延迟(按下摄像头按钮)时,这三个的常见是长时间延迟和立即继续回调功能。

        问题不一致。在极少数情况下,它确实按预期工作,没有延迟,但大多数时候我遇到这些问题。这些问题可能在我启动应用程序后或一段时间后发生,并且没有办法调试它们,因为延迟发生在相机插件本身,而不是我的代码中。

1 个答案:

答案 0 :(得分:0)

我在phonegap 2.9.0上面临同样的问题,经过多次失败的试验来解决问题后,我做了以下

  • 我创建了一个新的phonegap 3.5.0项目

  • 我从CLI构建了android平台

  • 我将www文件夹复制到新项目根文件夹

  • 我使用CLI

  • 添加了所有需要的插件
  • 我在图标和启动画面的顶级config.xml文件中进行了必要的更改,因为文件构造不同

  • 我运行了项目,现在没问题了。