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

二维码学习Zxing(一)——Zxing源码导入 #25

Open
soapgu opened this issue Apr 2, 2021 · 0 comments
Open

二维码学习Zxing(一)——Zxing源码导入 #25

soapgu opened this issue Apr 2, 2021 · 0 comments
Labels
Demo Demo 安卓 安卓

Comments

@soapgu
Copy link
Owner

soapgu commented Apr 2, 2021

正好有二维码扫描的需求,所以把相关第三方库的学习放到前面来学习了

  • 二维码库的确认

翻了一圈似乎提到最多的是zxing,跑到github地址上,一下27.5K,最近一次发布是2020.9.30,主线版本还保持活跃。嗯,就是你了。

  • 引用资料

这zxing的官档实在是看不出啥东西。网上资料又有点偏老。就着这几篇日志做梯子一步步完成的

  1. Android集成zxing 版本3.4.1这篇写的过于简单了,好在比较新鲜
  2. Android 二维码的扫码功能实现(一)这篇稍微老一点,好在比较详细
    取长补短一下吧
  • 操作步骤

  • 下载源码
    zxing Release或者mainline下载源码解压。
    关键文件夹android,android-core,android-integration

  • 导入项目
    file->new->import Module ,选择android文件夹,导入model命名为zxing,当然你可以自己起名
    android-core,android-integration怎么办?不要急,根据他的namespace文件夹规则,自己手工补充添加到对应package中

  • 模块化改造

  1. 修改zxing模块的build.gradle,直接盗图

2.AndroidManifest.xml修改
图片
去除application所有的属性
去掉CaptureActivity的主入口属性

3 Build再次报错,接下来让IDE帮我们改代码

4 有一处代码IDE改不了

HistoryItemAdapter(Context activity) {
   //super(activity,R.layout.history_list_item, new ArrayList<>() );
   super(activity, R.layout.history_list_item,new ArrayList<HistoryItem>() );
   this.activity = activity;
 } 

需要明确定义类型HistoryItem,可能编译的sdk版本差异,不深究了
编译通过代表成功了

  • 接下主程序组装
  1. 增加引用
    implementation project(path: ':zxing')

  2. 发起二维码请求

this.findViewById(R.id.button).setOnClickListener( v -> {
            IntentIntegrator integrator = new IntentIntegrator(this);
            integrator.setSingleTargetApplication( this.getPackageName() );
            integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES,-1);
        } );

setSingleTargetApplication是为了指定二维码搜索packageName,否则会跳出下载app弹框

  1. 接收二维码结果
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (scanResult != null) {
            // handle scan result
            Toast.makeText(this, scanResult.toString(), Toast.LENGTH_SHORT).show();
        }
    }

最后,一点要打开CAMERA的权限,zxing不会检查权限,会有异常
整个过程还算顺利,没有碰到多少幺蛾子。

  • 总结

不算完美,但是基本完成了一个简易的扫描二维码的简易Demo程序。
用到一些知识点,还需要进一步巩固

  1. Android的module的概念
  2. Android导入module的操作步骤
  3. 一般module和application module,用下来有区别。具体还需要总结
  4. module的资源映射,运行后我的标题栏神奇的被翻译成了“条码扫描器”,我明明没有做啥啊,结果在zxing的module里,我发现了相关的string.xml。原理其他module的资源可以被映射过来的。只是现象,暂时还没查相关资料
  5. 显示intent和隐式intent
    概念
  6. intent result
    获取 activity 的结果
    偷懒了,没有用官档的教科书式用法。后面改进
@soapgu soapgu added Demo Demo 安卓 安卓 labels Apr 3, 2021
@soapgu soapgu changed the title 二维码学习Zxing(一) 二维码学习Zxing(一)——Zxing源码导入 Apr 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Demo Demo 安卓 安卓
Projects
None yet
Development

No branches or pull requests

1 participant