使用 ZXing Android Embedded 实现二维码扫码
2016-03-07 23:10
1371 查看
晚上折腾了一个Android上的二维码扫码功能。基于封装之后的 ZXing Android Embedded 库,原型是 Google 做的一个开源项目,叫做 ZXing(zebra crossing),Logo 是下面这匹二维马。
ZXing 本身是提供直接通过 Intent 调用 的方式来实现扫码功能的,所以 ZXing Android Embedded 库也可以直接以调用 Intent 的形式进行,显得格外简洁。同时它既提供了现成的界面,也可以充分自定义,各取所需,极为方便。
打开 module 的
在
点击上方自动出现的
上述代码以 官方文档 最新的版本为准。
可以调整参数如下:
打开
在前述调整参数的代码段中添加一句:
下面放一个简单的二维码,需要测试的可以一用:
若本文对你有帮助,请扫描左边的二维码;若本文对你没有帮助,请扫描右边的二维码。谢谢客官。
目前已有 7 人因为本文获得帮助并表达谢意,已有 2 人表示虽然没有帮助但是仍然表示感谢。
ZXing 本身是提供直接通过 Intent 调用 的方式来实现扫码功能的,所以 ZXing Android Embedded 库也可以直接以调用 Intent 的形式进行,显得格外简洁。同时它既提供了现成的界面,也可以充分自定义,各取所需,极为方便。
导入
使用最新版的 Android Studio ,新建一个 Project ,包含一个 Blank Activity 即可,要求 sdkVersion 在23以上。打开 module 的
build.gradle文件,在最外层添加下述代码:
repositories { jcenter() }
在
dependencies中添加下述项:
compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar' compile 'com.google.zxing:core:3.2.1'
点击上方自动出现的
Try again或者手动 Sync 一下 Gradle 就可以了。
上述代码以 官方文档 最新的版本为准。
使用
在 MainActivity 的 onCreate 方法中写入下述代码。运行时如果可以出现扫码窗口,则为导入成功:new IntentIntegrator(this).initiateScan();
可以调整参数如下:
IntentIntegrator integrator = new IntentIntegrator(this); integrator.setPrompt("请扫描"); //底部的提示文字,设为""可以置空 integrator.setCameraId(0); //前置或者后置摄像头 integrator.setBeepEnabled(false); //扫描成功的「哔哔」声,默认开启 integrator.initiateScan();
竖屏
默认是横屏的,如果要调整成竖屏,新建一个 Empty Activity(我命名为 ScanActivity),内容如下:import com.journeyapps.barcodescanner.CaptureActivity; public class ScanActivity extends CaptureActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
打开
AndroidManifest.xml文件,编辑 ScanActivity 属性如下:
<activity android:name=".ScanActivity" android:screenOrientation="portrait" android:stateNotNeeded="true" android:theme="@style/zxing_CaptureTheme" android:windowSoftInputMode="stateAlwaysHidden" />
在前述调整参数的代码段中添加一句:
intentIntegrator.setCaptureActivity(ScanActivity.class);
返回
用onActivityResult接收返回的结果:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); if(result != null) { if(result.getContents() == null) { Log.d(TAG, "Cancelled"); Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else { Log.d(TAG, "Scanned: " + result.getContents()); Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } }
下面放一个简单的二维码,需要测试的可以一用:
若本文对你有帮助,请扫描左边的二维码;若本文对你没有帮助,请扫描右边的二维码。谢谢客官。
目前已有 7 人因为本文获得帮助并表达谢意,已有 2 人表示虽然没有帮助但是仍然表示感谢。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories