在一个界面开启扫码后退出界面,然后再在另外一个界面开启扫码,无法扫描识别
我这边产生上诉问题的原因是因为 我两个界面 扫码框位置不一致。
第一个扫码框位置 距顶部 150dp 第二界面距离顶部 300dp
如果你先打开第一个界面扫码 之后,再打开第二界面扫码,你需要把码放到第一个界面扫码框所在的位置才能识别。
产生这个的原因是:
public Rect getFramingRectInPreview() { if (framingRectInPreview == null) { Rect rect = new Rect(getFramingRect()); Point cameraResolution = configManager.getCameraResolution(); Point screenResolution = configManager.getScreenResolution(); //modify here // rect.left = rect.left * cameraResolution.x / screenResolution.x; // rect.right = rect.right * cameraResolution.x / screenResolution.x; // rect.top = rect.top * cameraResolution.y / screenResolution.y; // rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y; rect.left = rect.left * cameraResolution.y / screenResolution.x; rect.right = rect.right * cameraResolution.y / screenResolution.x; rect.top = rect.top * cameraResolution.x / screenResolution.y; rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y; framingRectInPreview = rect; } return framingRectInPreview; }
CameraManager 是全局的单例,其中getFramingRectInPreview 这个方法用来 获取 识别的区域的rect
这个方法中 有一个framingRectInPreview ==null 的时候才会重新计算识别区域。然而framingRectInPreview 一旦赋值 之后 没有地方可以置null 所以导致 无法更新新的识别区域。
解决办法
开启一个新的扫码界面时 ,framingRectInPreview先置null 具体操作,修改源码,或者利用反射修改属性