simon-leeeeeeeee / xcodescanner Goto Github PK
View Code? Open in Web Editor NEWA new frame for decode QR code and bar code on Android. It's faster, simpler and more accurate.
License: Apache License 2.0
A new frame for decode QR code and bar code on Android. It's faster, simpler and more accurate.
License: Apache License 2.0
希望可以加一个镜头自动拉近的功能.类似微信支付宝的扫码,不然远距离会扫描不上.
在华为mate9手机上 无法扫码识别 同一手机上的微信、自带浏览器以及第三方浏览器对同一二维码都可识别。图片无法上传 只能手打了
设备名称:HUAWEI Mate9
手机型号:MHA-AL00
版本号:MHA-AL00C00B233
EMUI版本:5.0.1
Android版本:7.0
打开demo报api不兼容,手机小米8.
在某些国产手机上如果第一次对焦失败,之后就不会再对焦了。
如何生成二维码?
首先觉得作者这个做的还可以,至少体验上比其他的库快。自己也想做类似的库,但对相关的api不太熟,思路不清晰。不过建议是可以提的。
1、预览框和外面上下左右的阴影,是否有必要分开做。而且这个布局比较简单,完全用不到约束布局,不建议有了MaskRelativeLayout,还搞一个MaskConstraintLayout。没必要,约束布局还要引入一个库,这对一个本身就是库的来说,不太好。建议删除,也不需要花时间在这上面。
2、不管是zxing还是zbar,都是只负责解码和生成码的,不涉及UI以及camera预览,以及拾取的图像回调,所以做这类库,也主要就是封装这些东西,至于怎么处理解码,可以写个接口,然后就可以自己选(图像数据回调给接口了,至于怎么解析,选择zxing还是zbar,可以动态控制,zbar太大啦)。可以参考下面这个库的设计:https://github.com/themaster-gh/BGAQRCode-Android-master
3、接口设计有点复杂。用这个库的的话,需要实现3个接口CameraScanner.CameraListener, TextureView.SurfaceTextureListener, GraphicDecoder.DecodeListener,其实我觉得可以合并成一个接口就好,这些接口的很多方法在库的内部实现就可以(因为代码都是固定的,没必要每次都copy一遍)。
4、好像没有闪光灯控制的接口。不过按照计划,这个也会加的。
机器是Android设备,但不是手机,下面是一些log
cn.simonlee.xcodescanner.core.NewCameraScanner.setPreviewSize() mPreviewSize = 1080x1848
cn.simonlee.xcodescanner.core.NewCameraScanner.takeOrientation() mOrientation = 0
cn.simonlee.xcodescanner.core.NewCameraScanner.getBigEnoughSize() minWidth = 1848 , minHeight = 1080
cn.simonlee.xcodescanner.core.NewCameraScanner.initSurfaceSize() mSurfaceSize = 1920x1080
cn.simonlee.xcodescanner.core.NewCameraScanner.initTextureReader() mTextureReader = 1920x1080
cn.simonlee.demo.xcodescanner.ScanActivity.openCameraSuccess() frameWidth = 1080 , frameHeight = 1920 , frameDegree = 0
cn.simonlee.xcodescanner.view.AdjustTextureView.setImageFrameMatrix() frameWH = 1080x1920 , frameDegree = 0
cn.simonlee.xcodescanner.view.AdjustTextureView.setImageFrameMatrix()B XY = 1 : 1.038961
cn.simonlee.xcodescanner.core.NewCameraScanner.setFrameRect() mOrientation = 0 frameRect = 0-0-1080-1848
cn.simonlee.xcodescanner.core.NewCameraScanner.setFrameRect() mClipRectRatio = RectF(0.0, 0.0, 0.9625, 1.0)
解码条码后,把条码在视野的位置坐标,按视野计算成比例,回调回来,是否可行?
希望作者提供一个延迟一段时间后才能再次扫码的方法
MainActivity中:
@Override
public void onClick(View v) {
int permissionState = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
if (permissionState == PackageManager.PERMISSION_GRANTED) {
startScan(v.getId());
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, v.getId());
}
}
不能用v.getId()作为requestCode,会直接崩溃。
不过你这个扫起来确实很快。这类项目github上有不少,但没见过一个好用的(因为很多改别人的),或多或少都有下面几个问题:
1、预览变形,这个也要看机型,但不知有没有可以兼容所有机型的方法。
2、扫码慢,复杂一点的就扫不出来
3、还是兼容性,在有些机型上会崩溃,但不可能测试到每个机型的,所以写这个需要经验吧,不知你这个兼容性如何,能否用于生产环境。
今天用了下在华为8.0上识别,条形码识别很快,但是二维码识别不出来。
Could not resolve all dependencies for configuration ':app:debugRuntimeClasspath'.
Could not determine artifacts for cn.simonlee.xcodescanner:zbar:1.1.8
Could not get resource 'https://jcenter.bintray.com/cn/simonlee/xcodescanner/zbar/1.1.8/zbar-1.1.8.aar'.
Could not HEAD 'https://jcenter.bintray.com/cn/simonlee/xcodescanner/zbar/1.1.8/zbar-1.1.8.aar'.
Connect to d29vzk4ow07wi7.cloudfront.net:443 [d29vzk4ow07wi7.cloudfront.net/54.230.118.75, d29vzk4ow07wi7.cloudfront.net/54.230.118.174, d29vzk4ow07wi7.cloudfront.net/54.230.118.24, d29vzk4ow07wi7.cloudfront.net/54.230.118.198] failed: Read timed out
Read timed out
手机型号 vivo y85A 版本 8.1.0
根据你的demo继承引入zbar也不行
自己直接加上依赖都不行,打开相机就在那里等着完全扫不出来
我指的角度是扫描框和二维码边框的角度。二维码是个正方形,扫码框也是个正方形,一般扫描,扫码框的四边和二维码的四边都是大致平行的,但转一下角度(45°左右),就会扫不出结果。
测试机型:
一加三。
安卓8.0.
条码示例:F0AC84138173#001944
编码方式:code128
异常类型:java.lang.UnsatisfiedLinkError
异常信息:No implementation found for long cn.bertsir.zbar.Qr.Symbol.a() (tried Java_cn_bertsir_zbar_Qr_Symbol_a and Java_cn_bertsir_zbar_Qr_Symbol_a__)
关键方法:cn.bertsir.zbar.Qr.Symbol.a(Native Method)
混淆应该如何配置?
错误输出是
java.lang.RuntimeException: TextureReader Error! EGL MakeCurrent failure: EGL_BAD_MATCH
at com.simonlee.scanner.core.TextureReader.initEGL(TextureReader.java:242)
at com.simonlee.scanner.core.TextureReader.run(TextureReader.java:191)
E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
cn.simonlee.demo.xcodescanner.ScanActivity.onSurfaceTextureDestroyed()
三星s7
android版本7.0.0
用新api会慢很多,但是旧api就识别的非常的快,大兄弟给你反馈一下
大佬不准备切换一下androidx版本么?
rt
可否增加 开/关 闪光灯?
如何设置摄像头旋转 多少度?
我在使用void decodeForResult(Context context, Uri uri, int requestCode);这个api的时候发现不能识别相册中的二维码。
后来改用void decodeForResult(Bitmap bitmap, RectF rectClipRatio, int requestCode);也会有部分机器不能够识别,看了源码有一段话说对图片分辨率有要求小于等于1920 * 1080。于是乎,在onActivityResult相册返回的data通过getContentResolver().query获取图片路径并生成的bitmap一定要压缩才可以解析二维码。我最开始用data.getData()把获取到的uri传入最上面的那个decodeForResult在三星G9500手机上会报错的
非常感谢楼主的开源,是我目前看到的扫码项目中,干货非常十足的项目
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.