遮盖相机使我的Android应用程序崩溃

时间:2018-08-30 13:47:06

标签: java android android-studio

我为Unity应用程序创建了一个Jar插件。 Jar插件使用我的Android平板电脑上的前置摄像头和OpenCV来执行一些图像处理。我发现如果我遮住了相机,大约4秒钟后,整个Unity应用程序就会崩溃。

插件中的Java代码调用以下方法将预览回调附加到相机...

mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {

  private long timestamp = 0;

  public synchronized void onPreviewFrame(byte[] data, Camera camera) {
  Log.w(LOG_TAG, "HAVE PREVIEW FRAME: Time Gap = " + (System.currentTimeMillis() - timestamp));
  timestamp = System.currentTimeMillis();

  try {
    processCameraFrame(data, camera);
    camera.addCallbackBuffer(data);
  } catch (Exception e) {
    Log.e(LOG_TAG, "addCallbackBuffer error");
    return;
  }
  Log.w(LOG_TAG, "RETURNING FROM ON PREVIEW FRAME...");
  }
});

然后预览回调会启动此AsyncTask,以在后台调用自定义的“检测”功能...

protected DetectionUpdate doInBackground(byte[]... params) {

  Log.w("Main", "detection task LIBRARY");
  DetectionUpdate update = new DetectionUpdate();        
  update.setDetectStatus(update_status.U_CANNOT_LOCATE_SYMBOL.ordinal());

  try {
   Mat mat = convertByteArrayToMat(params[0]);
   update = mStickerDetector.detect(mat, update, mStickerMeasurementHandler);
  } catch(Exception e) {
    Log.w("Main", "caught exception during detect: " + e.getMessage());
  }
  return update;
}

Android Studio中是否有某种方法可以弄清应用程序崩溃的原因(我logcat控制台中看不到崩溃的任何引用,只是说过程已死)。异常处理代码无效。

我觉得问题可能与doInBackground方法执行得太快有关,该方法在摄像机被遮盖并暴露出比赛条件时执行得太快。有没有人遇到类似的问题并且可以提出解决方案?

我正在使用Android 4.0.4。任何帮助,不胜感激!

0 个答案:

没有答案