ailiwean / NBZxing

🔥 2020年最好用的开源扫码,全方位优化,强烈推荐!! 支持多种常规zxing无法扫出的码,用就完了!! 🔥
MIT License
297 stars 55 forks source link

使用相册扫码成功后,不能在resultBackFile中重新启用相机 #45

Open cch-dev-arch opened 3 years ago

cch-dev-arch commented 3 years ago

使用parseFile识别图片,当识别不出时会重新启用相机,但是识别成功后默认就会关闭相机,无法在resultBackFile中控制重新启用相机。 FreeZxingView中 private fun onParseResult(result: com.ailiwean.core.zxing.core.Result?) {

    if (result != null && !result.text.isNullOrEmpty()) {
        mainHand.post {
            resultBackFile(result)
            scanSucHelper()
        }
    } else {
        mainHand.post {
            resultBackFile(null)
            unProscibeCamera()
        }
    }
}

这块调整为 scanSucHelper(); resultBackFile(result); 是否更好?

ailiwean commented 3 years ago

这里一定要判断result和result.text的, 你需要识别成功仍然启动就调用unProscibeCamera()。 记得star , 谢谢

cch-dev-arch commented 3 years ago

加过判断,也调用了unProscibeCamera(),识别后还是会停止 我的理解是,FreeZxingView中的onParseResult在执行resultBackFile后对相机进行了操作 没有识别到二维码则执行

resultBackFile(null)
unProscibeCamera()

这里会重新启用相机, 识别到二维码则会执行

resultBackFile(result)
scanSucHelper()

而在scanSucHelper中调用了onCameraPause,所以相机停止了

private final void scanSucHelper() {
      this.onCameraPause();
      AbleManager var10000 = this.ableCollect;
      if (var10000 != null) {
         var10000.clear();
      }

      ScanBarCallBack var1 = this.getScanBarView();
      if (var1 != null) {
         var1.stopScanAnimator();
      }

      VibrateHelper.playVibrate();
      VibrateHelper.playBeep();
   }

如果需要在resultBackFile中启用相机生效,可能需要调整调用顺序为:

scanSucHelper()
resultBackFile(result)

也可能是我理解不到位,请见谅

ailiwean commented 3 years ago

unProscibeCamera() 放在scanSucHelper() 之后执行

cch-dev-arch commented 3 years ago

我是继承的NBZxingView,onParseResult和scanSucHelper是FreeZxingView的私有方法,这两没法改动的吧

ailiwean commented 3 years ago

外边改的话,只能加一个延迟了

CupidLoud commented 2 years ago

使用unProscibeCamera()会卡ui一下