前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android实现条形码与二维码扫描

Android实现条形码与二维码扫描

作者头像
开发者技术前线
发布2020-11-23 15:35:03
4.1K0
发布2020-11-23 15:35:03
举报

有个二维码是目前移动端和webAPP 常用是一种和用户的交互方式,常用在社交,支付,电商app中,本文介绍实现条形码与二维码扫描。

在本次教程中,我们将使用ZXing库让我们的app实现条形码和二维码的扫描。

为什么选择ZXing

要实现条形码和二维码扫描功能,常用的有下面几种方法: 使用Google Play Service和Mobile Vision APIs。 使用barcodescanner库。 使用ZXing库。

我们来仔细分析以上三种方法各自的优缺点。 第一种,使用Google Play Service和Mobile Vision APIs。不合适,因为不是所有的用户设备都有安装Google Play Service,特别是在中国。 第二种,使用barcodescanner。也不合适,尽管barcodescanner的导入非常简单,识别也很快,但是UI的调整比较困难。特别是当UI非常复杂时,你就需要拉取整个项目的源码然后自己进行定制。 现在就只剩下ZXing了。ZXing库由谷歌出品,所以在短期内应该不会停止维护。很多应用,报错barcodescanner,都是基于ZXingk开发的。使用ZXing我们不用担心用户没有安装Google Play Service,而聚焦于开发和处理结果本身。

ZXing是什么

Zxing是Google提供的关于条码(一维码、二维码)的解析工具,提供了二维码的生成与解析的方法。

设置项目

添加依赖

在你的build.gradle文件(application级别)中,添加ZXing core 的库。

代码语言:javascript
复制
dependencies {
   compile fileTree(include: ['*.jar'], dir: 'libs')
   // 其他的库在这里...
   compile 'com.google.zxing:core:3.3.0'
   testCompile 'junit:junit:4.12'
}

添加必要的权限

在你的AndroidManifest.xml文件中,添加下面的代码:

代码语言:javascript
复制
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="io.github.marktony.espresso">   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WAKE_LOCK" />
   <uses-permission android:name="android.permission.VIBRATE" />
    <application ...

导入必要的类和资源文件将整个包复制到你的项目中。

注意:上面的包中的代码我做了简化,如果你需要ZXing示例项目此部分的完整的代码,请访问这里,并下载相应的代码。 代码文件导入完成后,我们还需要导入下面的资源文件: res/layout/activity_scan - CaptureActivity的布局文件. res/values/zxing_ids.xml - zxing id的集合. res/raw/beep.ogg - 当扫描成功后播放的声音文件. res/drawable/... - 共3个文件: scan_line.png, qr_code_bg.9.png, shadow.png.

开动吧

现在我们从MainActivity启动CaptureActivity并期待获取相应的结果:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {   public final static int SCANNING_REQUEST_CODE = 1;   private TextView textView;   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);       textView = (TextView) findViewById(R.id.textView);       textView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
               intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
               startActivityForResult(intent, SCANNING_REQUEST_CODE);
           }
       });
   }   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       switch (requestCode) {
           case SCANNING_REQUEST_CODE:
               if (resultCode == RESULT_OK) {
                   final Bundle bundle = data.getExtras();
                   Handler handler = new Handler(Looper.getMainLooper());
                   handler.post(new Runnable() {
                       @Override
                       public void run() {
                           textView.setText(bundle.getString("result"));
                       }
                   });
               }
               break;
           default:
               break;
       }
   }
}

我们可以在onActivityResult()方法中得到相应的结果。 注意: 如果你的app的target api level是23或者更高, 不要忘记适配运行时权限因为我们的app需要用到相机。

测试

现在我们可以测试app是否成功运行了。访问 qr-code-generator.com生成你想要的二维码,然后进行愉快的测试吧。我们可以期待获得下面的结果:

结论

在这篇教程中,我们使用ZXing库实现了条形码和二维码的扫描。在你自己的app中,你可能需要对扫描的结果进行进一步的处理,例如加载URL或者是从第三方数据源中获取数据等等。 你可以在访问Espresso项目主页下载全部源代码。Espresso是一个基于MVP架构,采用RxJava2, Retrofit2, Realm3.0, ZXing开发的快递查询App。

参考

ZXing - ZXing("Zebra Crossing")项目官方主页。

作者:TonnyL

链接:http://www.jianshu.com/p/2bea07e0c1b9

相关推荐

论格局,别只看眼前的两三年!

技术 - 思维 - 感悟

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发者技术前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么选择ZXing
  • ZXing是什么
    • 设置项目
      • 添加依赖
      • 添加必要的权限
  • 开动吧
  • 测试
  • 结论
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档