android 二维码简单开发

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">本文主要讲关于安卓的二维码的使用:扫描二维码,生成简单的二维码</span>

进入正题:二维码扫描需要一个相关的框架,谷歌官方提供了一个很好的框架: ZXing 框架,用起来也比较简单便捷

平台:android studio,首先是添加依赖,两种方式,直接在依赖中的搜索ZXing选择goodle 框架

或者可以选择 lib 添加依赖这里自己在 github 上找到一个库(可到https://github.com/yzbbanban查看相关项目,关于二维码的),这里就直接引入 lib 库,引入方式,现将 lib 导入 android 项目中

然后是添加依赖

这是添加之后的结果

代码部分就很简单了,布局文件就用一个 Button+TextView,TextView 用于显示扫描之后的结果

布局代码:

  <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:onClick="scan"
        android:layout_height="wrap_content"
        android:text="扫描" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />
Button 加入 onClick 事件

 public void scan(View view) {
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
    }

直接启动扫描二维码相关的的CaptureActivity,也不需要在注册文件中加入权限(库中已加入相机权限),只需要直接调用即可,并且我们扫描之后需要获取返回值,所以需要 startActivityForResult 获取一个返回值
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String text = bundle.getString("result");
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            tv.setText(text);
        }
    }
获取返回值呈现相关数据,其中 resultCode 中获取的参数为 lib 中CaptureActivity 的返回结果,其中相关的代码是这样的
  public void handleDecode(Result rawResult, Bundle bundle) {
        inactivityTimer.onActivity();
        beepManager.playBeepSoundAndVibrate();

        Intent resultIntent = new Intent();
        bundle.putInt("width", mCropRect.width());
        bundle.putInt("height", mCropRect.height());
        bundle.putString("result", rawResult.getText());
        resultIntent.putExtras(bundle);
        this.setResult(RESULT_OK, resultIntent);
        CaptureActivity.this.finish();
    }
即获取的的值是一个 bundle,我们就需要在 onActivityResult 中利用 bundle 回去相关参数

这样就完成了一个简单的扫描二维码的程序,可将二维码回去的结果生成一个字符串

线面介绍一下由文字生成二维码的代码:同样也是利用框架中的方法,稍微解释下就行

布局代码:

<EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_make"
        android:text="生成二维码"
        android:onClick="make"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/iv"
        android:src="@mipmap/my_logo"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
一个输入框,一个生成按钮,一个现实图片(Linnerlayout 布局)

方法很简单,获取输入框的数据,然后调用 EncodingUtils 中的creatorCode()方法,参数依次为:输入的内容,图片宽度,图片高度,logo 的图片(Bitmap)

public void make(View view) {
        String intput = et.getText().toString().trim();
        if ("".equals(intput)) {
            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
        } else {
            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
            iv.setImageBitmap(b
            );
        }
    }

然后就是主要代码的完整代码:
package com.wangban.yzbbanban.myapplication;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    private EditText et;
    private ImageView iv;
    private Bitmap logo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        et = (EditText) findViewById(R.id.et);
        iv = (ImageView) findViewById(R.id.iv);
        logo = BitmapFactory.decodeResource(getResources(), R.mipmap.my_logo);

    }

    public void scan(View view) {
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
    }

    public void make(View view) {
        String intput = et.getText().toString().trim();
        if ("".equals(intput)) {
            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
        } else {
            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
            iv.setImageBitmap(b
            );
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String text = bundle.getString("result");
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            tv.setText(text);
        }
    }

}

猜你喜欢

转载自blog.csdn.net/u013377003/article/details/52034688