利用 ZXing Android Embedded 实现二维码处理

xiaoxiao2021-02-27  324

ZXing   Android   Embedded 是一个非常好用的开源库,对于 ZXing 在 Android 上的应用方法进行了精简。这里简单地用一个小 demo 来练习对此库的使用。

引用开源库

Android Studio 引用方法相当简单,直接在 build.gradle 文件里加入如下代码:

repositories { jcenter() } dependencies { compile 'com.journeyapps:zxing-android-embedded:3.4.0' compile 'com.android.support:appcompat-v7:23.1.0' // Version 23+ is required } android { buildToolsVersion '23.0.2' // Older versions may give compile errors } 123456789101112 123456789101112

扫描二维码

新建一个项目,在布局文件里设置简单的布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.shmj.mouzhai.zxingdemo.MainActivity"><Button android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="startScan"android:text="@string/start_scan" /><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/result"android:textSize="16sp" /><TextView android:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="24sp" /></LinearLayout> 1234567891011121314151617181920212223242526272829303132 1234567891011121314151617181920212223242526272829303132

接着在 MainActivity 里,在 startScan() 方法里调用:

public void startScan(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setOrientationLocked(false)//设置扫码的方向 .setPrompt("将条码放置于框内")//设置下方提示文字 .setCameraId(0)//前置或后置摄像头 .setBeepEnabled(false)//扫码提示音,默认开启 .initiateScan(); } 123456789 123456789

但是默认的样式是横屏的,如果想要切换为竖屏的话,需要进一步自定义样式。这里只是简单地以切换竖屏为例,当然可以根据源码自由定义想要的效果。  新建 ScanActivity 继承自 CaptureActivity:

import android.os.Bundle; import com.journeyapps.barcodescanner.CaptureActivity; public class ScanActivity extends CaptureActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } } 123456789101112 123456789101112

在 AndroidManifest.xml 中添加:

<activity android:name=".ScanActivity"android:screenOrientation="fullSensor"tools:replace="screenOrientation"/> 1234 1234

接着利用之前用到的 IntentIntegrator,在刚才的点击事件里添加:

.setOrientationLocked(false)//解锁屏幕方向锁定 .setCaptureActivity(ScanActivity.class)//设置扫码界面为自定义样式 12 12

接着,我们需要对扫码结果进行处理。在 onActivityResult() 中:

@Overrideprotected 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_SHORT).show(); } else { //扫码出结果 tvResult.setText(result.getContents()); Toast.makeText(this, "扫码成功", Toast.LENGTH_SHORT).show(); } } else { super.onActivityResult(requestCode, resultCode, data); } } 1234567891011121314151617 1234567891011121314151617

这样,扫码功能就完成啦。 

生成二维码

在布局文件中继续添加:

<EditText android:id="@+id/et_words"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp" /><Button android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="createCode"android:text="@string/create_code" /><ImageView android:id="@+id/iv_code"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" /> 1234567891011121314151617 1234567891011121314151617

我们要做的很简单,在文本框输入文字,点击按钮,将输入的内容转化为二维码。  所需要调用的代码也很少,因为都是已经封装好了的。回到 MainActivity 中:

/** * 点击生成按钮,根据字符串生成对应的二维码 */public void createCode(View view) { Bitmap bitmap; BitMatrix matrix; MultiFormatWriter writer = new MultiFormatWriter(); String words = etWords.getText().toString();//输入的内容try { matrix = writer.encode(words, BarcodeFormat.QR_CODE, 500, 500); BarcodeEncoder encoder = new BarcodeEncoder(); bitmap = encoder.createBitmap(matrix); ivCode.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } 1234567891011121314151617 1234567891011121314151617

大功告成!

转载请注明原文地址: https://www.6miu.com/read-2860.html

最新回复(0)