Android扫描二维码
这里主要介绍一款控件 zxing-android-embedded 。
直接使用 ZXing 当然也不是不可以,甚至zxing现在也提供了android-integration,但是需要用户下载zxing的安卓应用,而该应用功能又有些冗余,于是很多blog都提供了一些精简的步骤,但是,一定程度上增加了开发负担,此时正是 zxing-android-embedded 派的上用场的时候。
建议先下载该控件的demo,运行后有个直观的感受,如果demo里面的例子已经满足个人的需求,直接把对应的activity加到自己的工程即可,比如提供的 CustomScannerActivity.java 就是一个正方形的竖屏的扫码框,在 AndroidManifest.xml 中添加
<activity
android:name=".CustomScannerActivity"
android:screenOrientation="fullSensor"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>在需要使用扫码的activity中初始化,并调用
IntentIntegrator integrator = new IntentIntegrator(this); //是否播放提示音 integrator.setBeepEnabled(true); //是否保留扫码成功时候的截图 //integrator.setBarcodeImageEnabled(true); //调用 integrator.setCaptureActivity(CustomScannerActivity.class).initiateScan();
设置扫码结果的回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
Toast.makeText(this, "您取消了扫描", Toast.LENGTH_LONG).show();
} else {
//二维码的实际内容
String content = result.getContents();
//如果你在调用扫码的时候setBarcodeImageEnabled(true)
//通过下面的方法获取截图的路径
String imgPath = result.getBarcodeImagePath();
}
} else {
Log.d(TAG, "Weird");
super.onActivityResult(requestCode, resultCode, data);
}
}以下主要介绍如何定制化扫码框,比如添加四个直角:
比较好的做法是通过Android Studio将下载的 zxing-android-embedded 作为module加入到工程中,在主module中添加gradle依赖
compile(project(':zxing-android-embedded')) { transitive = true }