Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在申请权限后,可以预览,但是无法识别 #386

Closed
StaticCoder opened this issue Jan 9, 2019 · 12 comments
Closed

在申请权限后,可以预览,但是无法识别 #386

StaticCoder opened this issue Jan 9, 2019 · 12 comments

Comments

@StaticCoder
Copy link

StaticCoder commented Jan 9, 2019

ver:1.3.6
手机型号:ALL models
在扫码界面第一次申请权限后,可以预览,但是无法识别,没有错误日志。后面重新进就可以了。
代码如下,在onStart中申请权限,在onPermissionsGranted回调中开启预览和识别:

@OverRide
protected void onStart() {
super.onStart();
requestCodeQRCodePermissions();
}

@AfterPermissionGranted(REQUEST_CODE_QRCODE_PERMISSIONS)
private void requestCodeQRCodePermissions() {
String[] perms = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
if (!EasyPermissions.hasPermissions(this, perms)) {
EasyPermissions.requestPermissions(this, "扫描二维码需要打开相机权限", REQUEST_CODE_QRCODE_PERMISSIONS, perms);
} else {
zxingview.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
zxingview.startSpotAndShowRect(); // 显示扫描框,并开始识别
}
}

@OverRide
public void onPermissionsGranted(int requestCode, List perms) {
zxingview.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
zxingview.startSpotAndShowRect(); // 显示扫描框,并开始识别
}

@liuxinyea
Copy link


@StaticCoder
Copy link
Author

StaticCoder commented Jan 24, 2019

已解决,这几天修复了这个库的几个bug:

  1. 部分机型上的异常Crop rectangle does not fit within image data.
  2. 定位点偏移的问题.
  3. 在扫码界面第一次申请相机权限后可以预览,但是无法识别.

如果有人需要的话可以评论。

PS:

  1. up主的这个库封装的确实好用。
  2. 加了两次讨论QQ群但是群主都没通过,不知道什么原因。

@vzhilong
Copy link

怎么修复的?我出现了一样的问题,第一次授权后无法识别。

@vzhilong
Copy link

已解决,这几天修复了这个库的几个bug:

  1. 部分机型上的异常Crop rectangle does not fit within image data.
  2. 定位点偏移的问题.
  3. 在扫码界面第一次申请相机权限后可以预览,但是无法识别.

如果有人需要的话可以评论。

PS:

  1. up主的这个库封装的确实好用。
  2. 加了两次讨论QQ群但是群主都没通过,不知道什么原因。

求助,发现sufface创建有问题。

@wZuriel
Copy link

wZuriel commented Mar 15, 2019

第一次授权后无法识别怎么解决的

@StaticCoder
Copy link
Author

怎么修复的?我出现了一样的问题,第一次授权后无法识别。

第一次授权后无法识别怎么解决的

只需要把CameraPreview.java中的第315行:
return mCamera != null && mPreviewing && mSurfaceCreated;
改成:
return mCamera != null && mPreviewing; 即可。
判断surface是否创建的意义不大。

@helixs
Copy link

helixs commented Mar 26, 2019

@StaticCoder 666 不得不把代码拉下来

@wyj365372704
Copy link

@StaticCoder 666 不得不把代码拉下来

可以通过反射修改这个变量。

if (permission.granted) {
{
final Field mCameraPreviewField = mZXingView.getClass().getSuperclass().getDeclaredField("mCameraPreview");
mCameraPreviewField.setAccessible(true);
final CameraPreview cameraPreview = (CameraPreview) mCameraPreviewField.get(mZXingView);
final Field mSurfaceCreatedField = cameraPreview.getClass().getDeclaredField("mSurfaceCreated");
mSurfaceCreatedField.setAccessible(true);
mSurfaceCreatedField.set(cameraPreview, true);//解决第一次授权进入后,无法识别二维码的问题。
}
mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
}

@StaticCoder
Copy link
Author

@StaticCoder 666 不得不把代码拉下来

可以通过反射修改这个变量。

if (permission.granted) {
{
final Field mCameraPreviewField = mZXingView.getClass().getSuperclass().getDeclaredField("mCameraPreview");
mCameraPreviewField.setAccessible(true);
final CameraPreview cameraPreview = (CameraPreview) mCameraPreviewField.get(mZXingView);
final Field mSurfaceCreatedField = cameraPreview.getClass().getDeclaredField("mSurfaceCreated");
mSurfaceCreatedField.setAccessible(true);
mSurfaceCreatedField.set(cameraPreview, true);//解决第一次授权进入后,无法识别二维码的问题。
}
mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
}

我对反射不太熟,如果你测试过可以的话,也是不错的解决方案。

@bingoogolapple
Copy link
Owner

已解决,这几天修复了这个库的几个bug:

  1. 部分机型上的异常Crop rectangle does not fit within image data.
  2. 定位点偏移的问题.
  3. 在扫码界面第一次申请相机权限后可以预览,但是无法识别.

如果有人需要的话可以评论。

PS:

  1. up主的这个库封装的确实好用。
  2. 加了两次讨论QQ群但是群主都没通过,不知道什么原因。

@StaticCoder 求 PR

基本没登 QQ 了

@alidili
Copy link

alidili commented Nov 27, 2019

@StaticCoder 666 不得不把代码拉下来

可以通过反射修改这个变量。

if (permission.granted) {
{
final Field mCameraPreviewField = mZXingView.getClass().getSuperclass().getDeclaredField("mCameraPreview");
mCameraPreviewField.setAccessible(true);
final CameraPreview cameraPreview = (CameraPreview) mCameraPreviewField.get(mZXingView);
final Field mSurfaceCreatedField = cameraPreview.getClass().getDeclaredField("mSurfaceCreated");
mSurfaceCreatedField.setAccessible(true);
mSurfaceCreatedField.set(cameraPreview, true);//解决第一次授权进入后,无法识别二维码的问题。
}
mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
}

@wyj365372704 这个方法不错,试了下可以,不用拷源码了

@bingoogolapple
Copy link
Owner

@alidili 1.3.7 中已修复

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants