有个二维码是目前移动端和webAPP 常用是一种和用户的交互方式,常用在社交,支付,电商app中,本文介绍实现条形码与二维码扫描。
在本次教程中,我们将使用ZXing库让我们的app实现条形码和二维码的扫描。
要实现条形码和二维码扫描功能,常用的有下面几种方法: 使用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是Google提供的关于条码(一维码、二维码)的解析工具,提供了二维码的生成与解析的方法。
在你的build.gradle
文件(application级别)中,添加ZXing
core
的库。
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
// 其他的库在这里...
compile 'com.google.zxing:core:3.3.0'
testCompile 'junit:junit:4.12'
}
在你的AndroidManifest.xml文件中,添加下面的代码:
<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并期待获取相应的结果:
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